2013-04-26 4 views
5

J'utilise parse.com comme backend de mon application, il permet à l'utilisateur de se connecter via son compte facebook ou twitter. En outre, il a la possibilité de relier twitter/facebook à son compte préexistant.Parse.com PFUser Linking Twitter et Facebook compte?

Voici le problème:

Si un utilisateur de connexion par le biais de son compte facebook un nouveau PFUser est créé sur le nuage. Si le même utilisateur se connecte à nouveau via son compte twitter, un autre PFUser est créé sur le cloud. Maintenant si l'utilisateur veut lier son compte facebook avec son compte twitter, parse.com répond avec "ce compte Twitter est déjà connecté à un autre utilisateur".

Comment puis-je fusionner deux PFUsers ici? Quelqu'un peut-il me suggérer une approche pour résoudre ce problème?

+0

https://parse.com/questions/merging-pfusers –

+0

La manière suggérée ici ne permettra qu'un seul utilisateur par périphérique. Je ne veux pas ça. Toute autre suggestion? – Ashwani

Répondre

3

, il semble qu'il est Malheureusement pas possible d'avoir un compte Facebook ou Twitter lié à plus d'un PFUser. De plus, il semble qu'il ne soit pas possible de fusionner deux autres entrées PFUser - Voir Parse's answer here. Ce que vous pouvez faire à la place est de conserver les données sur la table PFUser strictement à des fins d'autorisation et de conserver le reste des données dans une nouvelle classe Parse dédiée (par exemple userData, pointée par les entrées PFUser). En ce sens, vous pourrez utiliser plusieurs entrées PFUser pointant vers la même entrée userData. Ainsi, si vous avez une entrée PFUser précédemment liée à un compte Twitter spécifique dans le backend Parse, il est préférable que vous vous connectiez à ce PFUser spécifique, puis pointez cette entrée sur votre entrée userData existante.

4

Sans voir aucun code, il semble que vous appelez PFTwitterUtils logInWithBlock lorsque vous essayez de lier un compte Twitter. Ce serait une mauvaise approche, car il suffit de créer un nouveau PFUser au lieu d'utiliser le PFUser existring créé en se connectant avec facebook.

Ce que vous voulez faire à la place est d'utiliser la méthode PFTwitterUtils pour lier l'actuel PFUser avec un compte Twitter. The Parse documentation montre le code suivant pour ce faire.

PFUser *user = [PFUser currentUser]; 
if (![PFTwitterUtils isLinkedWithUser:user]) { 
    [PFTwitterUtils linkUser:user block:^(BOOL succeeded, NSError *error) { 
     if ([PFTwitterUtils isLinkedWithUser:user]) { 
      NSLog(@"Woohoo, user logged in with Twitter!"); 
     } 
    }]; 
} 
+0

Je suis désolé mais vous vous trompez ici, j'utilise déjà le même code que vous avez posté. Un problème se produit lorsque j'essaie de lier un compte Twitter (qui est précédemment connecté, c'est-à-dire un autre PFUser) à mon compte actuel. Il jette l'erreur que ce compte twitter est déjà connecté à un autre utilisateur. Comment puis-je resoudre ceci? – Ashwani

4

Vous pouvez faire une chose qui est:

lorsque vous liez utilisateur actuel avec un autre tout Facebook/Twitter compte, vous devez Délier l'utilisateur à un certain moment. disons que lorsque vous vous déconnectez, vous devez vérifier si l'utilisateur actuel est lié à Facebook/Twitter?

si votre utilisateur actuel est lié à une de l'autre utilisateur que vous devez supprimer le lien afin que vous puissiez à nouveau relier l'utilisateur Facebook/Twitter avec tout autre utilisateur, comme ce

Pour les utilisateurs de Facebook:

if([PFFacebookUtils isLinkedWithUser:[PFUser currentUser]]){ 

       [PFFacebookUtils unlinkUserInBackground:[PFUser currentUser] block:^(BOOL Success,NSError *unlinkError){ 
        if(!unlinkError){ 
         // User unlinked 
        }else{ 
         // Erro while unlink user 
        } 
       }]; 
      } 

pour l'utilisateur Twitter:

if([PFTwitterUtils isLinkedWithUser:[PFUser currentUser]]){ 

       [PFTwitterUtils unlinkUserInBackground:[PFUser currentUser] block:^(BOOL Success,NSError *unlinkError){ 
        if(!unlinkError){ 
         // unlink user 
        }else{ 
         // Error while unlink 
        } 
}]; 
} 
Questions connexes