2012-04-26 19 views
1

私は、FBクレデンシャルの入力を求めるポップアップを生成する「Facebookにログイン」ボタンがあります。FBにすでにログインしている場合、Facebookのログインポップアップが表示されないようにするにはどうすればよいですか?

ユーザーが既にアプリに参加していて、アプリを離れて戻ってきた(Facebookにまだログインしている)場合は、ユーザーが「Facebookでログイン」をクリックできるようにしたいポップアップを表示します。

現時点では、上記の状況では、ポップアップが1秒間開いてから、ページがアプリのログイン状態にリダイレクトされます。

私は以下のコードを実装しました.Javascriptの場合、私は完全なnoobですので、答えが明らかであるかもしれませんが、私は何をすべきかわかりません!

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

    (function(d) { 
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 

    $(function() { 
    $('#fb_connect').click(function(e) { 
     e.preventDefault(); 

     FB.login(function(response) {      
     if (response.authResponse) { 
      // $('#connect').html('Connected! Hitting OmniAuth callback (GET /auth/facebook/callback)...'); 

        //this might not be the best way to do this ... 
        $('#welcome_form').submit(); 
      // since we have cookies enabled, this request will allow omniauth to parse 
      // out the auth code from the signed request in the fbsr_XXX cookie 
      // $.getJSON('/auth/facebook/callback', function(json) { 
      //    $('#connect').html('Connected! Callback complete.'); 
      //    $('#results').html(JSON.stringify(json)); 
      //   }); 
     } 
     }, { scope: 'email, read_stream' }); 
    }); 
    }); 

答えて

4

するとページが読み込まれると、あなたは、FBのSDKは、ユーザーの状態を確認するためにFB.getLoginStatusメソッドを使用しロードし、初期化した後。

FB.getLoginStatus(function(response) { 
    if (response.status === "connected") { 
     // use the response.authResponse 
    } 
    else if (response.status === "not_authorized") { 
     FB.login(function(response) { 
      ... 
     }, { scope: "email, read_stream" }); 
    } 
    else { 
     // user not logged in to facebook 
    } 
}); 
+0

ありがとう: は、ユーザーがすでにログインしてあなたのアプリを許可されている場合は、応答がアクセストークン、ユーザID、など例えば

を持っている必要があります!私の次の質問は、あなたが// response.authResponseを使うときに何をするかです。私はomniauthがauthコードを解析できるはずだと言うomniauthというRailsの宝石を使っています。そのことを念頭に置いて、私は上記のコード(あなたがコメントを書いた場所)に記入する必要がありますか? – ralphos

+0

私はこれが何であるか分かりません* omniauth *もの、私はレールを使ったことはありません。しかし、あなたは[サーバー側の認証](http://developers.facebook.com/docs/authentication/server-side/)を実装しようとしているように聞こえますが、javascriptを使うとクライアント側の認証です。 "// response.authResponseを使用する"部分では、ユーザーはすでに認証されています。プロセスが完了し、jd sdkを使用してapi呼び出しを開始できます。あなたがサーバーでその能力を望むなら、サーバー側の認証と一緒に行きます。 –

+0

よろしくお願いします。あなたの助けに感謝。 – ralphos

関連する問題