2012-09-06 3 views
8

J'ai quelques-unes des questions au sujet de la nouvelle FBSession réautorisation (reauthorizeWithPermissions: Comportement: completionHandler :) à facebook sdk 3.0:Facebook iOS SDK 3.0 réautorisation

Une fois que quelqu'un est connecté via facebook sur mon application, sur certaines pages que je voudrais ré-authentifier l'utilisateur avec ses informations d'identification facebook. Cela permet de s'assurer que la personne qui consulte la page et la personne qui a ouvert une session sont les mêmes. Les autorisations de réauthentification restent les mêmes que celles de connexion. Tout ce dont j'ai besoin, c'est d'une nouvelle confirmation du mot de passe de l'utilisateur pour assurer ce cas.

D'où je me sers du reauthorisationWithPermissions: pour ce faire. Et je suis en train le comportement FBSessionLoginBehaviorForcingWebView pour faire en sorte que l'utilisateur est obligé d'entrer dans son/ses lettres de créance. Cependant, cela ne fonctionne pas du tout. Il apparaît tout simplement un WebView vide pendant quelques secondes, puis disparaît ... À ce stade, il appelle le cependant, le bloc FBSesstionStateHandler à l'état mis à FBSessionStateOpen, ne parvient pas à appeler le FBSessionReauthorizeResultHandler défini dans le (completionHandler :).

Cependant, si je simplement définir le comportement par défaut (FBSessionLoginBehaviorWithFallbackToWebView) il fonctionne très bien en passant la demande et-vient entre app/safari facebook et termine l'appel en appelant correctement le completionHandler. Cependant, avec le comportement par défaut, il ne force pas l'utilisateur à entrer à nouveau son mot de passe.

Je suis vraiment confus, et les sdk docs sur le web ne sont pas très utiles pour mon cas. Est-ce que quelqu'un pourrait me conseiller sur ce que je fais de mal ... ou si son temps est un bug connu dans le SDK? Si oui, comment puis-je répondre à mes exigences?

-(void) reauthThroughFacebook { 

if (!self.facebookSession.isOpen && self.facebookSession.state == FBSessionStateCreatedTokenLoaded) { 
    [self.facebookSession openWithBehavior: FBSessionLoginBehaviorWithNoFallbackToWebView 
         completionHandler: self.stateHandler]; 
} 

if (self.facebookSession.isOpen) { 
    [self.facebookSession reauthorizeWithPermissions: self.userPermissions 
              behavior: FBSessionLoginBehaviorForcingWebView 
            completionHandler:^(FBSession *session, NSError* error){ 
             if (self.facebookSession == session) { 
              [self completedReauthWithSuccess:(error == nil) error:error]; 
             } 
            }]; 
} else { 
    [self completedReauthWithSuccess:NO error:[NSError errorWithDomain: @"No active session found." 
                    code: FBErrorInvalid userInfo: nil]]; 
} 

} 

En outre, une fois l'affichage Web reauth apparaît correctement, comment puis-je faire en sorte que est générée automatiquement l'adresse e-mail de l'utilisateur et bloquer le formulaire utilisateur changeant? Puis-je accéder à la vue Web dans le sdk facebook pour définir ces propriétés?

Enfin, ce qui se passe à l'accès et la date d'expiration jeton si la re-auth a lieu avec les mêmes autorisations que connexion ??

Merci d'avance,

+0

Je me demande la même chose; il semble que dans sdk 3.1 reauthorizeWithPermissions: Comportement: completionHandler: méthode est également dépréciée. je suis – Kevlar

Répondre

0

Ceci est une question intéressante. Je ne l'ai pas codé donc je ne sais pas si cela fonctionnera, mais compte tenu de la façon dont les sessions FB travail, ceci est ma meilleure estimation à une approche.

En utilisant une session FB, je ne pense pas que vous pouvez le faire. Au sein d'une session donnée, FB auth est binaire, soit l'utilisateur est connecté (par exemple a une session ouverte) ou non. Les diverses méthodes reauth étaient destinées à auth avec des permissions supplémentaires et sont maintenant déconseillées en faveur des méthodes pour demander des permissions supplémentaires.

Vous pourriez être en mesure d'accomplir quelque chose proche de ce que vous voulez en appuyant plusieurs sessions de FB. L'autorisation secondaire serait essentiellement la même que celle permettant à un deuxième utilisateur FB de se connecter à votre application. Vous fermez ensuite la deuxième session au moment approprié. Vous pouvez faire en sorte que les deux sessions correspondent au même utilisateur FB en comparant les ID utilisateur FB.

Dans le dernier paragraphe du Understanding Sessions doc, FB plusieurs sessions de soutien discute.