1

私は自分のウェブサイトとの統合に取り組んでFacebook Loginきましたが、これまでのところほとんど成功しています。しかし、私はまだいくつかの疑問を持っています。

私のホームページで; a hrefFacebook へのログインをポップアップ ウィンドウでユーザーに促す Javascript 関数をトリガーするボタンがあります。初めての場合、ユーザーは許可を求める別のポップアップ ウィンドウでプロンプトが表示されます。

ユーザーがログインした後 (そして許可を受け入れた後); document.location.href(s)彼は;を使用して別のページにリダイレクトされます。これまでのところ、すべてが完璧に機能しています。私が次にやりたいことは次のとおりです。

ユーザーがリダイレクトされるページをロードすると、ウェルカム メッセージ (Welcome [email]) が表示されます。ユーザー名。

私はJavascriptでそれをやろうとしています:

<script>
$('document').ready(function(){

window.fbAsyncInit = function() {
    FB.init({
    appId   : '[my app id]',
    oauth   : true,
    status  : true, // check login status
    cookie  : true, // enable cookies to allow the server to access the session
    xfbml   : true // parse XFBML
    });

    $(document).trigger('fbload');
};

$(document).on('fbload', function(){
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            FB.api('/me', function(response) {
            user_email = response.email; //get user email
            // Here, I can display the welcome message :)
            });
        } else if (response.status === 'not_authorized') {
            // the user is logged in to Facebook,
            // but has not authenticated your app
        } else {
            // the user isn't logged in to Facebook.
            }
        });
    });
});
</script>

このコードは問題なく動作します :) - ただし、FB.getLoginStatus関数から を削除すると、次のコードになります。

$(document).on('fbload', function(){
    FB.api('/me', function(response) {
    console.log(response);
    user_email = response.email; //get user email
    console.log(user_email);
    // Here, I can display the welcome message :)
});

に対して次の出力が得られますuser_email

undefined

私はその論理を理解できないようです!FB.getLoginStatusユーザーがログインしているかどうかのみを確認するため。なぜそれ(またはそれの欠如)が関数呼び出しを混乱させるのFB.apiですか?

誰かがここで実際に起こっていることの論理を説明できれば幸いです!

注:FB.getLoginStatusとにかく使用することになるかもしれませんが、主に何が起こっているのかというロジックに関心があります!

4

1 に答える 1

0

あなたのFB.api('/me', function(response) { function は、FB.getLoginStatus(function(response) { function.

コードを次のように変更すると、ブラウザのコンソールで確認できます。

    $(document).on('fbload', function(){
        FB.getLoginStatus(function(response) {
            console.log(response);  //CHANGE
                FB.api('/me', function(response) {
                    user_email = response.email; //get user email
                    console.log(response);  //CHANGE
                });
            });
        });

これは、FB.api('/me', function(response) {が現在の FB ユーザーに関するさまざまなデータ (名前、性別、出身地、学歴、ユーザー名、引用符など) を要求しているためです。Facebook は、そのユーザーをアプリケーションにログインさせます。

于 2013-06-30T00:21:23.980 に答える