ウェブサイトのFacebookログイン:ユーザーのFacebookログアウトを処理するベストプラクティス?

私はユーザーがFacebookでログインする必要があるwebappを書いています(Facebooklessのログインはアプリケーションのコンテキストでは意味がありません)。理想的には、最初の訪問後、ユーザーが/index を訪れたとき、私のwebappは以前にデートしたクッキーを見て、自動的にユーザーをシームレスにログしてアプリケーション(/app <コード>)。

私の問題は、ユーザーがFacebookからログアウトして自分のアプリに戻るときに発生します。私のドメイン上のCookieはまだ存在しており、 oauth_token はまだ有効です(60日間有効です)。ユーザーは自動的にログに記録され、アプリケーションは期待どおりに動作します。

私には、FacebookにサインインしていなくてもFacebookアカウントにサインインしたままでいるというのは間違いない。私はStackoverflow自体で遊んだ。この動作も同様に許可されます。私の心配は間違っていますか、または私のサーバーから最初に/index を要求したときにユーザーがFacebookにサインインしているかどうかを確認する方法があります。

5

1 答え

私の意見では、ユーザーが既にFacebookからログアウトしている間は、あなたのアプリがサインインしたままにならないとは思わない。

これが望ましくないシナリオの1つは、公共のコンピュータからアプリを使用している場合です。私がFacebookからログアウトすると、あなたのアプリはまだ私を "覚えている"。そして今、このコンピュータを使用する人はあなたのアプリの中で私のFacebookの身元を引き受けます。

ここの問題は、ユーザーのFacebookのログインステータスを覚えておくために自分のCookieを設定することだと思います。明らかに、ユーザーがFacebook自体からサインアウトすると、あなたのクッキーはクリアされません。だからこの時点であなたのクッキーはFacebookのステータスと同期していません。

ユーザーのFacebookログインステータスを覚えておくために、自分のCookieを使用しないことをお勧めします。この目的のためにFacebook自身に常に頼ってください。

一般的な戦略は、ユーザーがあなたのアプリに来るたびにFacebookが提供する仕組みを使ってFacebookのログイン状況を確認することです。このようにして、あなたのアプリはユーザーのログイン状態に関してFacebookと同期します。

私は個人的にこのコードを使って、ユーザーのログインのためにFacebook Javascript APIを呼び出します。

/* 
 * Init code for Facebook connect
 */
window.fbAsyncInit = function() {
        FB.init({
                appId      : FACEBOOK_APP_ID,//App ID
                channelUrl : CHANNEL_URL,//Channel File
                status     : true,//check login status
                cookie     : true,//enable cookies to allow the server to access the session
                xfbml      : true, //parse XFBML
                oauth      : true
        });

       //check facebook login status
        FB.getLoginStatus(function(response) {
                console.log("FB login status: " + response.status);
                if (response.status === 'connected') {
                        showWelcome();  //display welcome message
                } else if (response.status === 'not_authorized') {
                       //the user is logged in to Facebook, but not connected to the app
                        showFbLogin();  //display Facebook Login button
                } else {
                       //the user isn't even logged in to Facebook.
                        showFbLogin();  //display Facebook Login button
                }
        });

       //subscribe to facebook events
        FB.Event.subscribe('auth.authResponseChange', function(response) {
                fbAuthResponseChanged(response);
        });
};
2
追加された
私がそれを見る方法は、あなたのアプリがログインしているユーザーのために何かをしているたびに、ユーザーがその時点で実際にログインしているかどうかを確認する必要があります。あなたのアプリケーションがFacebookユーザーのログ記録状態を記憶するために設定したクッキーがあれば、それに頼るべきではないし、Facebookの状態と同期させておくべきである。
追加された 著者 Gz Zheng,
たとえば、アプリがFacebookに投稿される前に、FB.getLoginStatus関数を呼び出すことができます。もちろん、これは最適化された方法ではないかもしれません。
追加された 著者 Gz Zheng,
問題は、FBJSのクッキーが私のドメインでFacebookのサインアウト時にクリアされないということです。 Facebookからサインアウトして、私のアプリに行くと、私のアプリはまだFBJSのクッキーを見る。私は彼らが実際に私がJavaScriptをロードするまでサインインしていないことを知ることができません。これにより、/ loginページをロードする必要があるので、ログインしている場合は余分なリダイレクトが追加されます.jsはログイン済みであることがわかり、/ appにリダイレクトします
追加された 著者 KJ Tsanaktsidis,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript