本日、WebアプリケーションのFacebookログインフローが一部のユーザーに対して機能しなくなりました。現在のプロファイルを取得しようとすると、エラーが返されます。ユーザーをOAuthログインフローにリダイレクトして生成したアクセストークンは拒否されたと主張しています。
指定された理由は次のとおりです。
ユーザーが90日以上アプリを使用していないため、アクセストークンは無効です
私にとっては、これは意味がありません私たちはアクセストークンを現在のセッション以外の場所に保存せず、ユーザーがFacebookでログインするたびに再作成します。
GET /me
呼び出しに対するSpring Socialのスタックトレースは次のようになります。
ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.Java:85)
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.Java:59)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.Java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.Java:775)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.Java:728)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.Java:702)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.Java:350)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.Java:220)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.Java:215)
この問題はおそらく Facebook APIの変更 に関連していますが、これがログインごとに作成する短期間のアクセストークンにどのように影響するかわかりません。
更新:
この問題はFacebookによって修正されたばかりのようです。
私 バグを提出した Facebookで、現在(5/3/18)解決に取り組んでいます。
こことバグのコメントにいくつかの回避策が提案されています。要約する:
auth_type=reauthorize
を使用して、エラーをキャッチし、ユーザーを手動で再認証しますそれが最も簡単な方法であるように思われるので、私は解決策#2に行きます。
統合テストがテストユーザーでログインしたときにこの問題に遭遇しました。次のJSONがGraph APIから返されました。
{
"error": {
"message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
"type": "OAuthException",
"code": 190,
"error_subcode": 493,
"fbtrace_id": "F/1z2AsTRx8"
},
"timestamp_microsecond": "2018-05-30 11:22:01.353949"
}
テストユーザーはアプリに「関与」しないため、これは大きな問題でした。これを修正するために私はしなければなりませんでした:
これらの手順をすべて完了すると、テストユーザー(および統合テスト)が再び機能しました。
facebookの応答:
お問い合わせいただきありがとうございます。これは実際には既知の問題であり、すでに別のバグレポートで追跡しています。
レポートを既存のレポートとマージするので、問題を1か所で処理できます。アップデートについては、このスレッドを参照してください: http://developers.facebook.com/bugs/194772814474841/
私の一時的な解決策はJS SDKを使用することでした、私の場合は正しく動作しています...
FB docsでこのリンクを見つけました: Refreshing User Access Tokens
これは、90日後にユーザーがトークンを再確立する必要があることを示しているため、このようなエラーが発生した場合は、ユーザーをリダイレクトして再度登録する必要があります。
彼らは、このドキュメントの上部にある非アクティブなユーザーのトークンを削除することさえ言及しています。たぶん彼らは間違いをして、すべてのユーザートークンを削除しました。 とにかく、解決策は、ユーザーを再購読にリダイレクトすることです。
バグは discussion に従って持続します
言及された議論に対するユーザーのコメントによると、私たちはアプリのすべてのユーザーの許可を取り消し、それは機能しました。このために、次のグラフapi endpoint を使用しました。ユーザーのfacebookIDを保持する必要がありました。
よろしく
TEMPORARY SOLUTIONiOSの場合、SDKコードを変更して「再認証」をサポートする必要があります。ソースコードを変更するには、CocoaPodsを使用してダウンロードする必要があります。次に、ポッドに次の関数をコピーします。 https://github.com/mavris/FacebookFix