2011-05-29 1 views
2

Mon code:Erreur de validation de jeton d'accès: La session est invalide parce que l'utilisateur déconnecté

var fbWebContext = FacebookWebContext.Current; 
if (fbWebContext.IsAuthorized()) 
{ 
     var fb = new FacebookWebClient(fbWebContext); 
     dynamic result = fb.Get("/me"); 

     name.Text = result.name; 
} 

dynamic result = fb.Get("/me"); 

lancers francs:

(OAuthException) Erreur de validation de jeton d'accès: La session est invalide parce que l'utilisateur déconnecté.

Comment devrais-je changer mon code pour éviter cela?

Répondre

2

Vous pouvez demander l'autorisation étendue "offline_access". Cela empêchera ce message et l'utilisateur ne doit pas se connecter à chaque fois.

+0

offline_access est maintenant obsolète et sera supprimé d'ici mai 2012. – wize

+0

@wize, existe-t-il une alternative? – coder

+0

@ jeremy-patrick: Oui, la manière standard Facebook est une ré-authentification. Comment faire cela dépend de la plate-forme côté client que vous utilisez. Ma plate-forme côté client est Android, ce qui signifie que je dois appeler l'autorisation sur le SDK Facebook Android à chaque fois que le jeton d'accès expire. Facebook a [informations officielles sur leur page Web] (http://developers.facebook.com/docs/authentication/access-token-expiration/) – wize

2

Vous ne pouvez vraiment pas l'empêcher, vous avez juste besoin d'attraper l'exception et d'y faire face. Eh bien, vous pouvez l'éviter du côté client en effectuant des appels équivalents à partir du FB Javascript SDK pour détecter une mauvaise session (expirée, déconnectée, l'utilisateur a changé son mot de passe, etc.) et lui demander de se connecter à nouveau sur le serveur. client avant que votre code côté serveur ne soit appelé.

Si vous regardez le code source Facebook C# SDK, vous pouvez voir que IsAuthorized() = IsAuthenticated(). Tout ce que IsAuthenticated fait est vérifier pour voir si vous avez une session, et que l'heure d'expiration de la session n'a pas passé. La session peut avoir été invalidée par l'utilisateur qui s'est déconnecté à l'insu du serveur.

Il existe d'autres exceptions à Facebook OAuth que vous pouvez obtenir ici aussi. Il est préférable d'enrouler le code ci-dessus dans un try/catch et de gérer les exceptions en invitant de nouveau l'utilisateur à se connecter et à obtenir une nouvelle session avec lui.

0

Qu'en est-il de l'objet CanvasAnthorizer? Cet objet ne garantit-il pas que l'utilisateur est connecté et avec les autorisations appropriées?

+0

Il est toujours possible que l'utilisateur se déconnecte du FB sur un autre onglet du navigateur et invalide ainsi le jeton d'accès sur l'onglet utilisé par l'application. J'ai testé ce scénario et il résulte de l'exception OAuth ci-dessus. –

+0

Que faites-vous dans un tel scénario? J'ai ce problème, même si l'utilisateur se reconnecte, même si je redémarre l'application après qu'il se reconnecte – Ryan

+0

Je vomis de petites boîtes de message d'alerte qui les avertissent du problème et les invite à se connecter à nouveau. Cela dépend de leur retour à l'une des pages de mon application. Certains utilisateurs reçoivent des e-mails de mon application, et je mets une note en haut de l'e-mail s'ils ont un problème de jeton/OAuth. Vous devez attirer leur attention et leur donner un bouton sur lequel vous obtiendrez une nouvelle session/jeton. –

Questions connexes