0

我目前有一个现有的网站登录系统,我想增加用户通过 Facebook 注册我的网站的能力。

这是我的用户模型的样子。

用户模型:

  • 电子邮件
  • 电话
  • 密码
  • 脸书用户名
  • 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);

这样做的正确方法是什么?

此外,对于用户注册,我宁愿不使用注册插件,而是更喜欢我在大多数其他地方看到的流程,您单击“使用 Facebook 注册”,弹出一个窗口进行身份验证,然后将您带到另一个屏幕以输入其余详细信息,例如电话号码。关于如何做到这一点的任何想法?

4

2 回答 2

0

当用户第一次访问您的站点时,您会将用户的详细信息保存在数据库中。完成后,用户将被授权。

现在,您可以使用FB.getLoginStatus或 OAuth 检查用户是否已获得授权。如果是,则无需以 dB 为单位保存详细信息(因为授权用户的详细信息已以 dB 为单位保存),只需将他重定向到所需的页面。

于 2013-01-30T09:19:10.220 回答
0

我想出了如何将 id 安全地发送到我的登录处理程序。我发送签名请求而不是原始用户 ID。然后我使用 app secret 来解析包含 user_id 的签名请求。

    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 回答