Jeton d'accès Facebook invalide avec le message "la session ne correspond pas à la session stockée actuelle"?
J'ai récemment commencé à obtenir cette erreur lors de la publication sur le flux Facebook newsfeed d'une application utilisateur, J'ai une autorisation d'accès hors ligne pour les jetons d'accès, et ils ont travaillé amende précédemment. Cette erreur arrive pour 30-40% des utilisateurs.
"Error validating access token: Session does not match current stored session.
This may be because the user changed the password since the time the session
was created or may be due to a system error."
6 réponses
Il est possible que votre jeton d'accès devienne invalide pour une variété de raisons (Délai d'expiration passé, mot de passe modifié par l'utilisateur,désautorisation de votre application, déconnexion de Facebook, etc.). Vous devez toujours concevoir pour tenir compte de ce scénario.
Si vos utilisateurs sont actifs, il est facile d'obtenir un nouveau jeton d'accès à partir du point de terminaison OAuth sans qu'ils aient à faire/voir quoi que ce soit. Sinon, vous devriez faire un plan (comme les envoyer par courriel) pour savoir comment vous allez les faire revenir ainsi, vous pouvez obtenir un nouveau jeton d'accès. Le scénario que vous décrivez n'est pas nécessairement inhabituel. Vous pouvez trouver quelques exemples de code ici pour obtenir de l'aide sur la façon de gérer les jetons d'accès expirés.
Ceci est non documenté mais je viens de le tester et cela fonctionne avec des jetons d'accès expirés. Devrait fonctionner sur les jetons d'accès qui ont été invalidés si vous connaissez leur id utilisateur et qu'ils n'ont pas révoqué les privilèges de votre application. Tout d'abord, vous pouvez vérifier que vous avez toujours les autorisations dont vous avez besoin en appelant à l'aide de cette url:
Https://graph.facebook.com/userID/permissions?access_token=appID/appSecret
Si vous disposez toujours des autorisations publish_stream, vous pouvez émettre un message HTTP à cette url:
Https://graph.facebook.com/userID/feed
avec les paramètres post de access_token=appID|appSecret&message=test message
Consultez le blog officiel de facebook: Comment: gérer les jetons d'accès expirés
Le jeton de session hors ligne est modifié chaque fois qu'un utilisateur change son mot de passe. Si une session de travail précédente s'arrête soudainement (et que vous obtenez cette erreur), le mot de passe de l'Utilisateur a été modifié (probablement par l'utilisateur) et vous devrez les inviter à nouveau à vous accorder un accès hors ligne et enregistrer le nouveau jeton de session que vous obtenez.
Il semble y avoir beaucoup de questions sur la raison pour laquelle votre jeton aurait expiré si rapidement. Je pense que je peux faire la lumière là-dessus. Voici un certain nombre de scénarios que j'ai trouvés qui causent ceci:
Il y a l'évidence; l'Utilisateur a changé son mot de passe. Il n'y a rien que vous puissiez faire à ce sujet. Ils devront réautoriser votre application. Le reste de ces scénarios traite des jetons de page, qui sont similaires à un jeton pour un profil d'utilisateur, sauf qu'ils proviennent de l'interrogation /me/accounts
avec l'utilisateur jeton d'un administrateur valide pour la page. Ceux - ci semblent expirer beaucoup plus fréquemment.
Il semble que si un administrateur d'une page change son mot de passe (pas nécessairement celui qui est le jeton que vous utilisez), cela peut provoquer l'expiration du jeton. En outre, si vous avez des pages dans votre système avec le même administrateur, appeler /me/accounts
actualise souvent tous les jetons pour les pages que cet utilisateur administre. Cela signifie que si vous connectez une nouvelle page pour un utilisateur avec des pages existantes, vous devra mettre à jour les jetons de page existants avec les nouveaux fournis par /me/accounts
.
Enfin, la façon dont je traite cela dans mon système est de stocker l'utilisateur admin et le jeton en tant que parent du jeton de page dans ma base de données. De cette façon, lorsque j'ai besoin de reconnecter une page ou d'ajouter une nouvelle page, le système peut rechercher et mettre à jour tous les jetons de page associés reçus de /me/accounts
. Il vous permet également d'essayer automatiquement d'actualiser le jeton en appelant /me/accounts
lorsque vous recevez le jeton expiré exception.
Espérons que cela aide!
J'ai également rencontré ce problème lors de l'accès aux commentaires post de mon utilitaire de commande. Dans mon cas, tout fonctionnait bien, jusqu'à ce que soudain j'ai eu l'erreur:
Le serveur distant a renvoyé une erreur: (400) Requête incorrecte.
Après avoir diagnostiqué le problème, j'ai constaté que le jeton D'accès Facebook expirait après un certain temps, même si je l'ai créé avec l'option offline_access
comme ci-dessous:
https://www.facebook.com/dialog/oauth?client_id=[APPID]&redirect_uri=[URL]&scope=user_photos,email,user_birthday,user_online_presence,offline_access
Après avoir perdu beaucoup de temps sur RND, j'ai trouvé que il y a une option dans les paramètres avancés de l'application pour Supprimer l'autorisation offline_access. Mon client l'avait activé, et c'est la raison pour laquelle mon jeton expirait. Un coup d'oeil à l'image ci-dessous: