私のアプリでは、Facebook のセッション情報 (トークンと有効期限) をサーバーに渡して認証 (ログイン) しようとしています。
アプリサーバーへのログインシーケンスは次のとおりです。
- アクティブな Facebook セッションを取得します。
- セッションが有効な場合は、トークンを取得してサーバーに送信します。
そしてコードで:
Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
didLogin = true;
String token = session.getAccessToken();
Date expires = session.getExpirationDate();
loginWithFacebookSession(token, expires);
}
これが正常に機能してから数か月後、突然、サーバーに送信される情報が有効でない場合があることに気付きました。具体的にtoken
は が空の文字列で、expires
が無効な日付です。
Facebook SDK (バージョン 3.0.1) を少し調べたところ、エラーの原因と思われるものを見つけました。
private static final Date MIN_DATE = new Date(Long.MIN_VALUE);
private static final Date ALREADY_EXPIRED_EXPIRATION_TIME = MIN_DATE;
private static final Date DEFAULT_LAST_REFRESH_TIME = new Date();
static AccessToken createEmptyToken(List<String> permissions) {
return new AccessToken("", ALREADY_EXPIRED_EXPIRATION_TIME, permissions, AccessTokenSource.NONE,
DEFAULT_LAST_REFRESH_TIME);
}
これは、途中で Facebook SDK が空のトークンを作成し、SessionState.Category.OPENED_CATEGORY
.
実際には情報がないのに、なぜsession.isOpened()
戻ってくるのですか?別のプロパティを確認する必要がありますか? これは Facebook の SDK のバグですか?true
accessToken
編集:
これを Facebook に報告しました: https://developers.facebook.com/bugs/121924628017965