2

そこで、javascript sdk を使用して Facebook ログインのリンクを完了しました。

<script>
  window.fbAsyncInit = function() {
    FB.init({
        appId: '{{facebook_app_id}}',
        channelUrl : '//localhost:8097/channel.html',
        status: true, 
        cookie: true,
        xfbml: true
    });

    FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
        // connected
        alert(response.authResponse.userID);
        FB.api('/me', function(response) {
                  var userInfo = document.getElementById('user-info');
                  userInfo.innerHTML = '<img src="https://graph.facebook.com/' + response.id + '/picture" style="margin-right:5px"/>' + response.name;
                alert(response.name);
                document.getElementById('fb-root').appendChild(userInfo);
                });
      } else if (response.status === 'not_authorized') {
        // not_authorized
        alert("not_authorized");
      } else {
        // not_logged_in
        alert("not_logged_in");
      }
     });

    FB.Event.subscribe('{% if current_user %}auth.logout{% else %}auth.login{% endif %}', function(response) {
      {% if current_user %} window.location = "/logout" {% else %} window.location.reload(); {% endif %}
    });
  };
  (function() {
    var e = document.createElement('script');
    e.type = 'text/javascript';
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
  }());
</script>

そう、

javascript を使用して引数を渡し、データをデータストアに安全に挿入するにはどうすればよいですか。例、Response.name。フェイスブックのログインでも。彼らはログイン応答にトークンを使用していることに気付きました。これは、python facebook サンプル データストアにもあります。ただし、独自のログイン システムを作成したので、そのトークンを使用する必要はまったくないと思います。そのトークンをまったく使用しないことによるリスクはありますか?

4

1 に答える 1

2

純粋な JavaScript でこれを行うのは少し難しくなりますが、jQuery を使用でき、より具体的にはjQuery.postを使用できます。したがって、idとを使用することでname、この情報を次のようにアプリケーションに送り返すことができます。

$.post("/login/facebook/", { id: response.id, name: response.name })
.done(function(data) {
  alert("Data Loaded: " + data);
});

バックエンド側には、Facebook ユーザーをログインさせるために、この種のリクエストを予期するハンドラーが必要です。

ここで確認できる唯一の問題は、誰でも任意の ID と名前でこの POST リクエストを作成でき、実際にユーザーなのか、システムに侵入しようとしているだけなのかがわからないことです。そのため、Facebook はアクセス トークンを使用しているため、それをサーバーに送り返し、token、 、App IDおよびを使用App Secretして実際のユーザーを取得できます。

次のステップでは、独自のログイン システムを実装したので、セッション Cookie を使用して、現在ログインしているユーザーに関する情報を保存する必要があります。これにより、サイトをナビゲートできるようになります。自分でそれを行うことは非常に可能ですが、そのすべてを支援する何らかのフレームワークを使用することをお勧めします.

同様の状況が発生したとき、いくつかの調査の結果、 SessionsのためにFlaskを使用することを結論付けました。その後、 Flask-OAuth拡張機能を使用することで Facebook への接続がそれほど難しくないことがわかりました。

私のオープン ソース プロジェクトの 1 つであるgae-initで、Flask、Sessions、Facebook Login などを使用した完全な例を見つけることができます。

于 2013-02-17T10:57:12.660 に答える