我在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]分配给现有用户,以防它已经存在
答案 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。
更新:
使用FB访问令牌链接方法:
[PFFacebookUtils linkUserInBackground:user
withAccessToken:accessToken
block:^(BOOL succeeded, NSError *error) {
if (succeeded) {
NSLog(@"Woohoo, the user is linked with Facebook!");
}
}];