解析:Create/Save 未注册的新用户

Parse: Create/Save New User without signUp

Parse 似乎不允许我创建新用户,除非调用注册块。

似乎 Parse 也不允许您编辑 username/password 除非该用户是当前用户登录。

目标是创建一个新用户,保存他,当他们稍后注册时,我可以识别他们以前的用户帐户,如果不存在,则创建一个。

Signup/Login 阻止方法不是答案,我不想更改当前用户。

                   PFQuery *query = [PFUser query];
                  PFUser *userAgain = (PFUser *)[query getObjectWithId:user.objectId];
                  userAgain.username = "another_username";
 // This will throw an exception, since the PFUser is not authenticated
                  [userAgain save]

P.S。 这是电梯间距。这是一个聊天应用程序(使用 phone# 注册)。我想邀请我的通讯录中的用户(但不是应用程序中的用户)加入 "chatroom"。所以我为他们的 phone# 创建了一个用户帐户。当他们注册时,我登录之前创建的用户(选中 phone#s),他们在收件箱中看到我的 "chatroom"。

您可以考虑使用 enableAutomaticUser。如果您在用户和数据存储中的某个其他对象之间添加关系,那么该用户将被保存。我没有尝试这样做以确保在您设置电子邮件和密码(或请求重设密码)之前不会创建新的匿名用户,但它应该有效。

您可以设置用户的邮箱和密码,然后保存。

好的,这是我必须采取的步骤。

在登录端

  1. 为匿名用户启用 enableAutomaticUser

  2. PFQuery 用户注册以确保他的帐户不存在基于他的 phoneNumber

  3. 如果 PFQuery 有一个对象,保存这个 PFUser,我们将在之后使用他的凭据登录,如果短信验证是 true

注册结束

  1. 对于每个 phoneNumber,确保用户不存在。如果是,请忘记 phoneNumber,添加 PFuser

  2. 枚举每个 phoneNumber 以使用 REST API

    进行注册
    - (void) saveNewUserWithPhoneNumber:(NSString *)phoneNumber
     {
    NSURL *url = [NSURL URLWithString:@"https://api.parse.com/1/users"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
      [request setURL:url];
      [request setHTTPMethod:@"POST"];
     [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
     [request setValue:API KEY forHTTPHeaderField:@"X-Parse-REST-API-Key"];
     [request setValue:APP ID forHTTPHeaderField:@"X-Parse-Application-Id"];
    
    NSDictionary *dict = @{@"username":phoneNumber,@"password":phoneNumber,PF_USER_PHONENUMBER:phoneNumber, PF_USER_ISVERIFIED: @NO};
     NSError *error;
     NSData *postBody = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
    [request setHTTPBody:postBody];
    
     // Send request to Parse and parse returned data
     [NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                           if (!connectionError) {
                               NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    
                               NSString *objectId = [responseDictionary valueForKey:@"objectId"];
                               [_arrayOfSelectedUsers addObject:[PFUser objectWithoutDataWithObjectId:objectId]];
                               x--;
                               //If we finished all the phone numbers, create the chatroom;
                               if (x == 0){
                                   [self actionSend];
                               }
    
                           } else {
    
                           }
                       }];
      }
    

如果您缓存了原始用户的密码,您可以在创建新用户后使用该用户重新登录。看起来有点老套,但对我有用。