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。同样在facebook登录。我意识到他们使用令牌进行登录响应,它也在他们的 python facebook 示例数据存储中。但是我创建了自己的登录系统,所以我认为我根本不需要使用那个令牌。根本不使用该令牌是否有任何风险?

4

1 回答 1

2

用纯 JavaScript 做这件事有点困难,但你可以使用 jQuery,更具体地说是jQuery.post。因此,通过idname您可以简单地将这些信息发送回您的应用程序,如下所示:

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

在后端,您应该有一个处理程序,该处理程序期望这种类型的请求以登录该 Facebook 用户。

这样做的唯一问题是,任何人都可以使用任何 ID 和名称发出此 POST 请求,而您不知道他们是真正的用户还是只是试图进入您的系统。这就是 Facebook 使用访问令牌的原因,因此您可以将其发送回您的服务器,并使用token、 theApp ID和 theApp Secret您可以检索实际用户。

在下一步中,由于您实现了自己的登录系统,您应该使用会话 cookie 来存储有关当前登录用户的信息,以便您能够浏览该站点。尽管自己做这件事非常可行,但我建议您使用某种框架来帮助您完成所有这些工作。

当我们遇到类似情况时,经过一些研究,我们得出结论,因为Sessions使用Flask,后来我们发现使用Flask-OAuth扩展连接 Facebook 并不难。

您可以在我的一个名为gae-init的开源项目中找到使用 Flask、Sessions、Facebook 登录和其他一些东西的完整示例。

于 2013-02-17T10:57:12.660 回答