2015-09-21 19 views
5

Tôi đang sử dụng phân tích cú pháp trong ứng dụng iOS và có hai cách đăng ký, sử dụng email/mật khẩu hoặc đăng nhập Facebook.Cách kết hợp người dùng đã đăng ký bằng facebook với người dùng cũ đã đăng ký bằng cùng một email

Sự cố xảy ra khi người dùng đăng ký bằng email/mật khẩu của mình, sau đó đăng xuất và cố gắng đăng ký bằng tài khoản Facebook có cùng email.

Tôi đang sử dụng [PFFacebookUtils logInInBackgroundWithReadPermissions:block: để đăng ký với Facebook mà tạo ra một đối tượng người dùng mới trong bảng Users trong Parse

Bây giờ tôi có hai hồ sơ cho người sử dụng tương tự và tôi không thể cập nhật các bản ghi mà có các thông tin Facebook với email người dùng vì Parse sẽ không cho phép các email trùng lặp

Vậy giải pháp nào tốt nhất để giải quyết vấn đề này?

CẬP NHẬT

Tôi đã sử dụng giải pháp @kRiZ đăng nhập bằng đồng bằng đang Facebook sau đó tạo người dùng mới hoặc liên kết người dùng với các dữ liệu 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); 
       } 
      }]; 
     } 
    }]; 

} 

Bây giờ vấn đề là để gán [PFUser currentUser] cho người dùng hiện tại trong trường hợp nó đã tồn tại

+0

đó là vô cùng khó khăn để giải quyết vấn đề này. – Fattie

+0

tôi có cùng một vấn đề .... bạn đã kết thúc giải quyết điều này hoàn toàn? ... nếu vậy ... làm thế nào – lozflan

+0

Khi bạn gọi đây là "[tự signUpNewUserWithEmail: email];' bạn không cần phải nhập mật khẩu? Nhưng sau đó không có mật khẩu trong trường hợp này kể từ khi người dùng đăng nhập thông qua Facebook? –

Trả lời

1

Bạn có thể thử liên kết người dùng Facebook mới với người dùng hiện có trên Parse bằng cách sử dụng phương thức [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!"); 
     } 
    }]; 
} 

Xem phân tích documentation khi liên kết.

  1. Login via Facebook (không tiết kiệm sử dụng chưa)
  2. Query bảng sử dụng cho người dùng có email giống như thành viên này mới FB
  3. Nếu tìm thấy, liên kết, khác, tiết kiệm sử dụng như mới.

UPDATE: phương pháp

Liên kết với truy cập FB mã thông báo:

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

Điều đó không thể được thực hiện trong trường hợp của tôi khi người dùng đăng xuất, tức là 'người dùng' là null –

+0

liên quan đến 'Đăng nhập qua Facebook (không lưu người dùng nào được nêu ra)' vấn đề là '[PFFacebookUtils logInInBackgroundWithReadPermissions: block:' already tạo một đối tượng người dùng mới. Tôi nên sử dụng phương pháp nào để đăng nhập bằng Facebook thay vì phương pháp này? –

+0

Có, tôi đã sử dụng Facebook SDK đơn giản để đăng nhập vào Facebook. Điều này sẽ trả về cho bạn một 'FBGraphUser'. Sau khi đăng nhập thành công, bạn có thể kiểm tra và liên kết. Xem cập nhật cho một phương thức liên kết khác. – kRiZ

Các vấn đề liên quan