J'ai récemment commencé à avoir cette erreur en postant sur le flux d'actualités facebook D'un utilisateur de l'application, J'ai une autorisation d'accès en mode hors connexion pour les jetons d'accès, et ils ont fonctionné. 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."
Il est possible que votre jeton d'accès devienne invalide pour diverses raisons (le délai d'expiration est passé, le mot de passe de l'utilisateur a changé, l'utilisateur a supprimé l'autorisation de votre application, l'utilisateur s'est déconnecté 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 noeud final OAuth sans qu'ils n'aient rien à faire/voir. Si ce n'est pas le cas, vous devriez définir un plan (par exemple, leur envoyer un courrier électronique) pour savoir comment vous allez les faire revenir afin que vous puissiez obtenir un nouveau jeton d'accès. Le scénario que vous décrivez n'est pas nécessairement inhabituel. Vous pouvez trouver des exemples de code ici pour obtenir de l'aide sur la gestion des 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. Devraient travailler sur les jetons d'accès qui ont été invalidés si vous connaissez leur identifiant d'utilisateur et qu'ils n'ont pas révoqué les privilèges de votre application. Tout d'abord, vous pouvez vérifier que vous disposez toujours des 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 Publier-Flux, vous pouvez envoyer un HTTP POST à cette URL:
https://graph.facebook.com/userID/feed avec les paramètres de post de access_token=appID|appSecret&message=test message
Découvrez le blog officiellement sur facebook: How-To: Gérer les jetons d'accès expirés
Il semble y avoir beaucoup de questions sur pourquoi votre jeton aurait expiré si rapidement. Je pense que je peux faire la lumière sur cela. Voici un certain nombre de scénarios que j'ai trouvés qui causent ceci:
Il y a l'évident; l'utilisateur a changé son mot de passe. Vous ne pouvez rien y faire. Ils auront besoin de réautoriser votre application. Le reste de ces scénarios traite des jetons de page, qui sont similaires à un jeton pour un profil utilisateur, sauf qu'ils proviennent de l'interrogation de /me/accounts
avec le jeton d'utilisateur d'un administrateur valide pour la page. Celles-ci semblent expirer beaucoup plus fréquemment.
Il semble que si TOUS les administrateurs d'une page changent leur mot de passe (pas nécessairement celui du jeton que vous utilisez), le jeton peut expirer. De plus, si vous avez certaines pages de votre système avec le même administrateur, l'appel de /me/accounts
actualise souvent TOUS les jetons des pages que cet utilisateur administre. Cela signifie que si vous connectez une nouvelle page pour un utilisateur avec des pages existantes, vous devrez 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 consiste à stocker l'utilisateur administrateur et le jeton en tant que parent du jeton de page dans ma base de données. Ainsi, lorsque je dois reconnecter une page ou ajouter une nouvelle page, le système peut rechercher et mettre à jour tout jeton de page associé reçu de /me/accounts
. Il vous permet également de tenter automatiquement d'actualiser le jeton en appelant /me/accounts
lorsque vous recevez l'exception de jeton expiré.
J'espère que cela aide!
Le jeton de session hors connexion est modifié chaque fois qu'un utilisateur modifie son mot de passe. Si une session de travail précédente s'arrête soudainement (et vous obtenez cette erreur), alors le mot de passe de l'utilisateur a été modifié (probablement par l'utilisateur) et vous devrez le demander à nouveau pour vous accorder un accès hors connexion et enregistrer le nouveau jeton de session que vous obtenez .
J'ai également rencontré ce problème lors de l'accès aux commentaires de publication à partir de mon utilitaire de commande. Dans mon cas, tout fonctionnait bien, jusqu'à ce que j'ai soudainement 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'avais créé avec l'option offline_access
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 découvert qu'il y avait 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. Regardez l'image ci-dessous: