web-dev-qa-db-ja.com

Facebook Oauthログアウト

Oauth 2.を使用してFacebookと統合するアプリケーションがあります。

FBで認証し、RESTとGraph APIを完全にクエリできますが、アクティブなブラウザーセッションを認証するとFBで作成されます。その後、アプリケーションからログアウトできますが、 FBとのセッションは持続するため、他の誰かがブラウザを使用すると、以前のユーザーのFBアカウントが表示されます(以前のユーザーがFBから手動でログアウトしない限り)。

承認するために私が取る手順は次のとおりです。

  1. 呼び出し[リンク:graph.facebook.com/oauth/authorize?client_id ...]

ユーザーのブラウザーにアクティブなFBセッションがまだない場合、このステップはFacebookログイン/接続ウィンドウを開きます。 Facebookにログインすると、oauthトークンと交換できるコードで私のサイトにリダイレクトされます。

  1. (1)のコードで[LINK:graph.facebook.com/oauth/access_token?client_id ..]を呼び出します

これでOauthトークンが得られ、ユーザーのブラウザは私のサイトとFBにログインします。

  1. さまざまなAPIを呼び出して処理を行います:[リンク:graph.facebook.com/me?access_token= ..]

ユーザーがサイトからログアウトしたいとします。 FBの契約条件では、シングルサインオフを実行する必要があるため、ユーザーがサイトからログアウトすると、Facebookからもログアウトされます。これは少し難しいという議論がありますが、実際にそれを達成する方法があれば、喜んで従います。

私は次のような提案を見てきました:

A. Javascript APIを使用してログアウトします:FB.Connect.logout()。私はそれを使ってみましたが、うまくいきませんでしたし、私のサイトでJavascript APIを使用していないので、どのようにできるのか正確にはわかりません。セッションはJavascript APIによって維持または作成されないため、どのようにセッションが期限切れになるのかわかりません。

B. [LINK:facebook.com/logout.php]を使用します。これは、しばらく前にFacebookフォーラムの管理者によって提案されました。与えられた例は、FBセッション(非oauth)を取得する古い方法に関連しているので、私の場合にそれを適用できるとは思いません。

C.古いREST api expireSessionまたはrevokeAuthorizationを使用します。これらの両方を試しましたが、有効期限が切れている間は、セッションを無効にしないトークンをOauthブラウザは現在使用しているため効果がなく、ユーザーはFacebookからログアウトしていません。

Facebookのドキュメントは、パッチが多く、あいまいで、かなり貧弱です。フォーラムでのサポートは存在せず、現時点ではFacebookフォーラムにログインすることさえできません。それ以外に、彼ら自身のFB Connect統合はフォーラム自体でも機能しません。多くの自信を刺激しません。

あなたが提供できるあらゆる援助のためのTa。デレク

追伸HTTPSをLINKに変更する必要がありましたが、リンクを投稿するのに十分なカルマではなく、おそらく十分に公平です。

69
Derek Troy-West

私は同じ問題を抱えています。また、oauth(RubyOnRailsを使用しています)を使用してログインしますが、ログアウトするには、次のようなリンクを使用してJavaScriptで実行します。

<a href="/logout" onclick="FB.logout();">Logout</a> 

これは最初にonclick関数を呼び出し、facebookでログアウトを実行し、次に通常の/logout私のサイトの関数が呼び出されます。

私もサーバーサイドのソリューションを好むでしょうが、少なくともそれは私が望むことをしますが、両方のサイトでログアウトします。

私はFacebook統合のものも初めてであり、初めてそれを使って遊んでみましたが、私の一般的な感じは、ドキュメントは古いものがたくさんある場所にかなり広がっているということです。

41
Christoph

これは今のところ機能します-そして、フェイスブックのサイトにドキュメント化された@ http://developers.facebook.com/docs/authentication/ 。ドキュメントにどのくらい最近追加されたのかわからない、2012年2月をチェックしたときに存在していなかった

ユーザーをリダイレクトして、プログラムでFacebookのユーザーをログに記録できます。

https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

18
russau

このソリューションはFaceBookの現在のAPIでは動作しなくなりました(当初は意図していなかったようです)

http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com;

このリンクをサインアウトリンクまたは「yoursitename.com」にあるボタンに与えてください。ここで、サインアウトがウルホームページになった後に、あなたがリダイレクトしたい場所に戻ります。

できます..

18
sumit

ユーザーを次の場所にリダイレクトすることにより、プログラムでユーザーをFacebookからログアウトできます。

https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

次のパラメーターで指定するURLは、アプリの設定で定義されているアプリケーションと同じベースドメインを持つURLである必要があります。

詳細: https://developers.facebook.com/docs/authentication

10
Tealc Wu

access_tokenでこれを行うことができます:

$access_array = split("\|", $access_token);

$session_key = $access_array[1];

PHP SDKの$session keyを使用して、機能的なログアウトURLを生成できます。

$logoutUrl = $facebook->getLogoutUrl(array('next' => $logoutUrl, 'session_key' => $session_key));

これにより、ブラウザのFacebookセッションが終了します。

5

以下は、現在の(2.12)バージョンのAPIで機能する、受け入れられている回答の代替案です。

<a href="#" onclick="logoutFromFacebookAndRedirect('/logout')">Logout</a>

<script>
    FB.init({
        appId: '{your-app-id}',
        cookie: true,
        xfbml: true,
        version: 'v2.12'
    });

    function logoutFromFacebookAndRedirect(redirectUrl) {
        FB.getLoginStatus(function (response) {
            if (response.status == 'connected')
                FB.logout(function (response) {
                    window.location.href = redirectUrl;
                });
            else
                window.location.href = redirectUrl;
        });
    }
</script>
1
Pluc

PHP私がやっている:

<a href="?action=logout">logout.</a>

if(isset($_GET['action']) && $_GET['action'] === 'logout'){
    $facebook->destroySession();
    header(WHERE YOU WANT TO REDIRECT TO);
    exit();
}

うまく機能し、簡単で、ログアウトボタンのグラフィックを見つけようとしています。

1
Mike Wells

Update:このソリューションは機能しますが、ブラウザはユーザーとのやり取りでこの関数を実際に呼び出したいため、 'FB.logout()'への呼び出しは機能しません。

<a href="#" onclick="FB.logout();">Logout</a> 
0
halkujabra

Christophの答えのメモ: Facebook Oauth Logout ログアウト関数はコールバック関数を指定する必要があり、少なくともFirefoxではそれなしで失敗します。Chromeはコールバックなしで機能します。

FB.logout(function(response) {});
0
zoli

Pythonバックエンドからユーザーを直接ログアウトしたい開発者

これを書いている時点で、 m.facebook.com のトリックは機能しなくなり(少なくとも私にとっては)、ユーザーはモバイルFBログインページにリダイレクトされます。これは明らかにUXには適していません。

幸いなことに、FB PHP SDKには 半文書化されたソリューション (リンクがgetLogoutUrl()関数につながらない場合は、これはStackOverflowの少なくとも1つの他の記事でも言及されています: Facebook php SDK getLogoutUrl()problem

ところで、私はちょうどこの質問で ザック・グリーンバーグが正解した に気づきましたが、Python開発者の要約として私の答えを追加しています。

0

@Christoph:何かを追加するだけです。両方の場所で同時にログアウトするための正しい方法だとは思わない。(<a href="/logout" onclick="FB.logout();">Logout</a>)。

Just add id to the anchor tag . <a id='fbLogOut' href="/logout" onclick="FB.logout();">Logout</a>



$(document).ready(function(){

$('#fbLogOut').click(function(e){ 
     e.preventDefault();
      FB.logout(function(response) {
            // user is now logged out
            var url = $(this).attr('href');
            window.location= url;


        });
});});
0
Sohail

sumitが提案するモバイルソリューションはAS3 Airに最適です。

html.location = "http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com"

0
shi11i