Facebook getUser()機能ログアウト後にユーザーIDを返します
-
22-10-2019 - |
質問
Facebook PHP SDKを使用して開発しています。
ユーザーがFacebookからログアウトすると、自動的に私のウェブサイトからログアウトされるようにしたかったのです。
セッションCookieを使用して、次のコードを使用してセッションを検出しています。
$facebook->getUser();
何らかの理由で、 getUser()
functionは、WebサイトでFacebookからログアウトした後でも、ユーザーのFacebook IDを返します。
別の関数を使用して最初にセッションを検出しますか?
公式ドキュメントの例 ここ, 、次のコメントからの抜粋は次のとおりです。
// Get User ID
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
これにより、FacebookのセッションCookieがFacebookログアウトで解明されると信じるようになりました。
敬具、
ルーク
解決
同じ問題があります!
FB PHP SDKは、それらのものを$ _Sessionに保存します!ユーザーがログアウトをクリックすると、このように削除できます。
$_SESSION['fb_'.APP_ID.'_user_id'] = '';
$_SESSION['fb_'.APP_ID.'_access_token'] = '';
これは最終的な解決策ではありませんが、今のところ機能します。
コメントと解決策に感謝します!
他のヒント
セッションのものを処理する必要がない方法で、代替手段を与えたいと思います。ただし、これはセッションをクリーンアップするよりも遅いことを警告する必要があります。これは、新しいリクエストに依存しているためです。以下のコードで行っていることは、トークンがまだ有効であるかどうかをFacebookで確認することです。ここにあります:
try {
$facebook->api('/me','GET');
$logged = true;
} catch(FacebookApiException $e) {
$logged = false;
}
私の場合、私はJavaScript SDKを使用してすべてを行っていたので、ログアウトでセッションをクリーニングできませんでした。しかし、私のランディングページでは、応答を送信する前にそれをチェックするために回避する必要がありました。
あなたがこのようなものに直面しているなら、間違いなく良い解決策です。
問題はPHP-SDKであるようです basefacebook.php
で line 567
protected function getSignedRequestCookieName() {
return 'fbsr'.$this->getAppId();}
この方法は、SDKが探しているCookieの名前を返します。ただし、JavaScript-SDKは「FBS_」プレフィックスを使用します。これを「FBS_」に変更すると、正常に機能します。
return 'fbs'.$this->getAppId();}
$facebook->destroySession();
セッションを破壊するには、$ facebook-> Destrysession()を使用できます。