2015-09-21 7 views
5

Sto utilizzando parse in un'app per iOS e ci sono due modi di iscrizione, sia tramite e-mail/password o login Facebook.Come unire un utente registrato su Facebook con un utente esistente registrato con la stessa e-mail

Il problema si verifica quando un utente si registra utilizzando la sua email/password, quindi effettua il logout e tenta di registrarsi utilizzando il suo account Facebook che ha la stessa email.

Sto usando [PFFacebookUtils logInInBackgroundWithReadPermissions:block: per l'iscrizione a Facebook che crea un nuovo oggetto utente nella tabella Users in Parse

Ora ho due record per lo stesso utente e non posso aggiornare il record che contiene le informazioni di Facebook con l'email dell'utente perché Parse non consente email duplicate

Quindi quale dovrebbe essere la soluzione migliore per risolvere questo problema?

UPDATE

Ho usato la soluzione @kRiZ il login utilizzando il codice Facebook pianura allora o creare un nuovo utente o collegare l'utente con i dati di 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); 
       } 
      }]; 
     } 
    }]; 

} 

Ora il problema è quello di assegnare il [PFUser currentUser] per l'utente esistente nel caso esista già

+0

è incredibilmente difficile da risolvere questo problema. – Fattie

+0

ho lo stesso problema .... hai finito per risolvere completamente? ... if so ... how – lozflan

+0

Quando si chiama '[self signUpNewUserWithEmail: email];' non è necessario passare una password? Ma in questo caso non c'è password in quanto l'utente ha effettuato l'accesso tramite Facebook? –

risposta

1

Si può provare a collegare il nuovo utente di Facebook a un utente esistente su Parse utilizzando i metodi [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!"); 
     } 
    }]; 
} 

Vedere Parse documentation sul collegamento.

  1. Loggarti da Facebook (ancora non risparmiare utente)
  2. Query la tabella utente per l'utente avere la stessa e-mail come questo nuovo utente FB
  3. Se trovato, collegamento, altrimenti, salvare come nuovo utente.

UPDATE: metodo

Linking con accesso FB token:

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

Questo non può essere fatto nel mio caso in quanto l'utente è disconnesso, ovvero 'utente' è nullo –

+0

per quanto riguarda' Login via Facebook (non salvare ancora utente) 'il problema è che' [PFFacebookUtils logInInBackgroundWithReadPermissions: block: 'già crea un nuovo oggetto utente. Che metodo dovrei usare per accedere usando Facebook invece di questo? –

+0

Sì, ho usato semplicemente Facebook SDK per accedere a Facebook. Questo ti restituirebbe un 'FBGraphUser'. Dopo aver effettuato correttamente il login, puoi controllare e collegare. Vedi l'aggiornamento per un altro metodo di collegamento. – kRiZ