0

現在、自分のサイトには既存のログイン システムがあり、ユーザーが Facebook を通じて自分のサイトにサインアップできる機能を追加したいと考えています。

これが私のユーザーモデルの外観です。

ユーザー モデル:

  • Eメール
  • 電話
  • パスワード
  • フェイスブックのユーザーID
  • oauth トークン

メールアドレス、電話番号、パスワードを入力することで、通常の方法でサインアップできます。

または、Facebook で認証して電話番号を入力するだけで、Facebook にサインアップすることもできます。

電話番号フィールドが必要なため、これにはFacebook 登録プラグインを使用しています。redirect-uri をhttp://mysite.com/fb_processに設定しました。これにより、signed_request が解析され、データを使用してデータベースにユーザーが作成されます。この部分はかなりスムーズに動作します。

サイトを認証したユーザーが Facebook で再度ログインできるようにする方法がわかりません。

私は Javascript SDK を使用してから、jquery を使用して Facebook ユーザー ID を mysite.com/fb_login に投稿します。これは、データベース内の対応する Facebook ユーザー ID を持つユーザーを検索し、そのユーザーをログインさせます。技術的には機能しますが、機能しません。適切または安全ではないようです。mysite.com/fb_login?id={facebook_user_id} を使用して誰かをログインさせることができます。コードを参照してください:

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


    function fbLogin() {
      FB.login(function(response) {
        if (response.authResponse) { 
          FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.', response);
            $.post('fb_login', {id:response.id})
            .done(function() {
              window.location = 'http://mysite.com/user/dashboard'
            });
          });

        } 
        else {
          console.log('User cancelled login or did not fully authorize.');
        }
      });
    }

    $('#fb-login').click(fbLogin);

これを行う適切な方法は何ですか?

また、ユーザー登録については、Registration プラグインを使用するのではなく、Facebook でサインアップをクリックすると、認証用のウィンドウがポップアップし、別の場所に移動する他のほとんどの場所で見たフローを好むでしょう。電話番号などの残りの詳細を入力する画面。これを行う方法について何か考えはありますか?

4

2 に答える 2

0

ユーザーが初めてサイトにアクセスしたときに、ユーザーの詳細がデータベースに保存されます。完了すると、ユーザーは承認されます。

これで、FB.getLoginStatusまたは OAuth を使用して、ユーザーが既に承認されているかどうかを確認できます。はいの場合、詳細を dB で保存する必要はなく (許可されたユーザーの詳細は既に dB で保存されているため)、目的のページにリダイレクトするだけです。

于 2013-01-30T09:19:10.220 に答える
0

ログインハンドラーにIDを安全に送信する方法を見つけました。生の user_id ではなく、signed_request を送信します。次に、アプリ シークレットを使用して、user_id を含む signed_request を解析します。

    function fbLogin() {
      FB.login(function(response) {
        if (response.authResponse) { 
          FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.', response);
          });
          var signedRequest = response.authResponse.signedRequest;
          window.location = '/fb_login?signed_request=' + signedRequest;
        } 
        else {
          console.log('User cancelled login or did not fully authorize.');
        }
      });
    }
于 2013-02-01T05:41:25.250 に答える