さまざまな状況下で、Facebook の内部 AccessToken (Facebook API のさまざまな機能などで使用される) が無効になる場合があります。たとえば、ユーザーが Facebook ログインに依存するアプリケーションを使用するセッション間でパスワードを変更した場合。他にもいくつかのケースがあります。
ただし、次のようなエラーが発生して、アプリケーションが本質的にクラッシュしますdata={"error":{"message":"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 Facebook has changed the session for security reasons.", "type":"OAuthException", "code":190, "error_subcode":460}}
。
Passport の Facebook 戦略は AccessToken を使用し、ユーザーが Passport を介してログイン/認証されるとすぐにアプリで利用できるようになります。ただし、問題は、上記のエラーが発生した場合の対処方法です。Facebook は複雑な再認証フローを PHP の例として挙げていますが、一般的な意味では、Facebook でアプリを再認証する必要があります。
問題は、Facebook ページから Facebook アプリを削除し、Facebook ログインに依存するアプリケーションに再認証を強制した場合でも、Passport + Facebook ストラテジーがブラウザーのセッション ストレージから最後の既存の AccessToken を取得しているように見えることです。(少なくとも、私が Mozilla/Fx 26 で見ているものです)。アプリを何度か再承認しましたが、デバッグして Passport が返すものを確認すると、常に同じ無効な AccessToken が返されます。AccessToken がセッション ストレージに存在する場合、Passport は Facebook から新しいものを取得する代わりに、それを取得するようです。
この種のエラーが発生した場合、Passport + Facebook Strategy 内で、保存されている AccessToken を本質的に無視またはオーバーライドし、常に Facebook に新しいものを要求する方法はありますか? それを実現する方法はまったく明確ではありません。助けてくれてありがとう。
更新: 戦略を呼び出すためのサンプル コードにrefreshToken
はパラメーターがあります。これは何をしますか?このパラメーターで可能な解決策はありますか?
passport.use(new FacebookStrategy(
{
...
},
function(accessToken, refreshToken, profile, done)
{