如何将Facebook注册的用户与使用相同电子邮件注册的现有用户合并

Mah*_*dam 5 facebook ios parse-platform

我在iOS应用程序中使用解析,有两种注册方式,使用电子邮件/密码或Facebook登录.

当用户使用他的电子邮件/密码注册然后注销并尝试使用具有相同电子邮件的Facebook帐户注册时,会出现问题.

我正在使用[PFFacebookUtils logInInBackgroundWithReadPermissions:block:Facebook注册,Users在Parse 的表中创建一个新的用户对象

现在我有两个同一用户的记录,我无法使用用户电子邮件更新包含Facebook信息的记录,因为Parse不允许重复的电子邮件

那么什么应该是解决这个问题的最佳解决方案?

UPDATE

我使用@kRiZ解决方案使用普通的Facebook代码登录,然后创建新用户或使用Facebook数据链接用户

- (void)loginWithFacebookWithSuccessCallback:(APISuccessCallback)successCallback
                          andFailureCallback:(APIFailureCallback)failureCallback {
    // Login PFUser using Facebook
    NSArray *permissionsArray = @[@"public_profile", @"email"];

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    [login logInWithReadPermissions: permissionsArray handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
         if (error) {
             failureCallback(error);
         } else {
             FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,first_name,last_name,email,gender" parameters:nil];

             [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id fbResult, NSError *error) {
                 if (!error) {
                     NSString *email = result[@"email"];
                     User *existingUser = [self getUserByEmail:email];

                     if (existingUser == nil) {
                         [self signUpNewUserWithEmail:email];
                     } else {
                         // Need to set the current user to existingUser
                     }
                     [self linkCurrentWithAccessToken:result.token
                     successCallback(@{RESULT:RESULT_OK});
                 } else {
                     failureCallback(error);
                 }
             }];
         }
    }];

}
Run Code Online (Sandbox Code Playgroud)

现在问题是将[PFUser currentUser]分配给现有用户,以防它已经存在

kRi*_*RiZ 1

您可以尝试使用这些方法将新的 Facebook 用户链接到 Parse 上的现有用户[PFFacebookUtils linkUserInBackground:*...

if (![PFFacebookUtils isLinkedWithUser:user]) {
    [PFFacebookUtils linkUserInBackground:user withReadPermissions:nil block:^(BOOL succeeded, NSError *error) {
        if (succeeded) {
            NSLog(@"Woohoo, user is linked with Facebook!");
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

请参阅有关链接的解析文档。

  1. 通过 Facebook 登录(暂不保存用户)
  2. 查询用户表中与该新 FB 用户具有相同电子邮件地址的用户
  3. 如果找到,则链接,否则,保存为新用户。

更新:

与 FB 访问令牌的链接方法:

[PFFacebookUtils linkUserInBackground:user
                      withAccessToken:accessToken
                                block:^(BOOL succeeded, NSError *error) {
    if (succeeded) {
        NSLog(@"Woohoo, the user is linked with Facebook!");
    }
}];
Run Code Online (Sandbox Code Playgroud)