2015-09-21 56 views
5

我正在使用iOS應用程序進行解析,並且有兩種註冊方式,使用電子郵件/密碼或Facebook登錄。如何將Facebook註冊的用戶與使用同一電子郵件註冊的冒險用戶合併

問題發生在用戶使用他的電子郵件/密碼註冊然後註銷並嘗試使用他的Facebook帳戶進行註冊,該帳戶具有相同的電子郵件。

我使用[PFFacebookUtils logInInBackgroundWithReadPermissions:block:與Facebook上申請這在Users表中解析創建新的用戶對象

現在我有兩個記錄相同的用戶,我不能更新與Facebook的信息記錄用戶的電子郵件,因爲解析不會允許重複的電子郵件

那麼應該是最好的解決方案來解決這個問題?

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); 
       } 
      }]; 
     } 
    }]; 

} 

現在的問題是分配的[PFUser鏈接的用戶當前用戶]已存在

+0

這是令人難以置信很難解決這個問題。 – Fattie

+0

我有同樣的問題....你最終解決這個問題嗎? ...如果是這樣的話...... – lozflan

+0

當你調用這個'[self signUpNewUserWithEmail:email];'你不需要傳入密碼嗎?但是,在這種情況下沒有密碼,因爲用戶通過Facebook登錄? –

回答

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關於鏈接。通過Facebook

  1. 登錄具有相同的電子郵件,因爲這新的FB用戶
  2. 如果找到,鏈接(不保存用戶還)
  3. 查詢用戶表用戶,否則,保存爲新的用戶。

UPDATE:

聯法與FB訪問令牌:

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

在我的情況下,無法完成用戶註銷,即'用戶'爲空 –

+0

關於'通過Facebook登錄(不保存用戶)'問題是'[PFFVideosUtils logInInBackgroundWithReadPermissions:block:'already創建一個新的用戶對象。我應該用什麼方法來使用Facebook登錄而不是這個? –

+0

是的,我用普通的Facebook SDK登錄到Facebook。這會返回給你一個'FBGraphUser'。成功登錄後,您可以檢查並鏈接。查看另一個鏈接方法的更新。 – kRiZ

相關問題