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

时间:2015-09-21 13:13:15

标签: ios facebook parse-platform

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

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

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

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

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

更新

我使用@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);
                 }
             }];
         }
    }];

}

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

1 个答案:

答案 0 :(得分:1)

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

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

请参阅链接时解析documentation

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

    使用FB访问令牌链接方法:

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