-1

私はFacebookのjavascript SDKを使って、私のアプリがユーザーのFacebookアカウントに接続できるようにしようとしています。Facebookのログインボタン - ログインしようとする前にログインしているかどうかを確認する方法?

私のアプリが接続するコードを実行する前に、自分のアプリがすでにFacebookに接続されているかどうかを確認する簡単な方法はありますか?ユーザーが実際にfacebookを通してログインしていることを実際に見ることができるようにページをリロードする必要がありますが、私がlocation.reload()を実行すると、最後に、このコードがヘッダーにあり、それが再び実行されるため、無限ループに入ります。ヘッダーはすべてのページにあるので、他の場所にリダイレクトすることは役に立ちません。

主にFacebookのステップからステップガイドで、Facebookのログインボタンを機能させるためにザ・JSコード:

<script> 
function statusChangeCallback(response) { 
    console.log('statusChangeCallback'); 
    console.log(response); 
    if (response.status === 'connected') { 
     testAPI(); 
    } else { 
     document.getElementById('status').innerHTML = 'Please log ' + 'into this app.'; 
    } 
} 

window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '(my app id)', 
     cookie: true, 
     xfbml: true, 
     version: 'v2.8' 
    }); 

    FB.getLoginStatus(function (response) { 
     statusChangeCallback(response); 
    }); 

}; 
(function (d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); 
    js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk/debug.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

function testAPI() { 
    console.log('Welcome! Fetching your information.... '); 
    FB.api('/me', function (response) { 
     console.log('Successful login for: ' + response.name); 
     document.getElementById('status').innerHTML = 
      'Thanks for logging in, ' + response.name + '!'; 
    }); 
    get_fb_info(); 
} 

function get_fb_info() { 
    FB.api('/me', 'GET', {fields: 'first_name,last_name,name,email,id,picture'}, function (response) { //add email, 
     console.log("FB NAME: " + response.name); 
     console.log("FB EMAIL: " + response.email); 

     data_string = 'fb_id=' + response.id + '&f_name=' + response.first_name + '&l_name=' + response.last_name + '&name=' + response.name + '&email=' + response.email + '&picture=' + response.picture; 
     $.ajax({ 
      type: "POST", 
      url: "ajax_fb_login.php", 
      data: data_string, 
      success: function (data) { 
       console.log(data); 
       //location.reload(); only has to happen once 
      } 
     }) 
    }); 
} 
</script> 

感謝:)

+0

FB.initパラメータに 'status:true'を追加すると、SDKは実際に現在のログインステータスをチェックします。 – CBroe

答えて

2

公式ドキュメントに基づいては、以下のようなものが何をすべきトリック:

FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
    // the user is logged in and has authenticated your 
    // app, and response.authResponse supplies 
    // the user's ID, a valid access token, a signed 
    // request, and the time the access token 
    // and signed request each expire 
    var uid = response.authResponse.userID; 
    var accessToken = response.authResponse.accessToken; 
    } 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. 
    } 
}); 

FB.getLoginStatus()は、ユーザーがFacebookにログインしているとあなたのアプリを認証しているかどうかを判断することができます。

  1. ユーザーがフェイスブックに記録され、ユーザーがFacebookでログインしているが、(not_authorized)あなたの アプリケーションを認証していない、あなたの アプリケーション(接続)
  2. を認証した
  3. :ユーザーのための3つの状態があります。
  4. ユーザーがFacebookにログインしていないか、またはアプリケーションの を明示的にログアウトしていないため、Facebookに接続しようとしていないため、 のようにアプリケーションを認証したかどうかわかりません
+0

私はそれを試みましたが、「Uncaught ReferenceError:FBが定義されていません」というエラーが発生しました – ioan

+0

FBオブジェクトを呼び出すのはどこですか?元のコードをロジックで更新してログインステータスを取得できますか? –

+0

私は、elseブロックの中に自分の投稿内にあるコード全体を入れたいので、すでに接続されている場合は何もしなくても構いません。私もwindow.fbAsyncInit = function(){}の中に入れようとしましたが、Object {status: "unknown"、authResponse:null}と言って実際にはどちらも動作しませんでした – ioan

関連する問題