将Facebook登录和身份验证添加到现有用户帐户系统

时间:2013-01-30 08:43:56

标签: facebook facebook-javascript-sdk

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

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

用户模型:

  • 电子邮件
  • 电话
  • 密码
  • Facebook用户ID
  • oauth token

您可以通过提供电子邮件,电话和密码以常规方式注册。

或者您可以通过Facebook注册,只需通过Facebook进行身份验证并提供您的电话号码。

我正在使用Facebook Registration plugin,因为我需要电话号码字段。我已将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,弹出一个窗口进行身份验证,然后需要您到另一个屏幕输入其余的详细信息,如电话号码。有关如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:0)

用户首次访问您的网站时,您将保存数据库中用户的详细信息。完成后,用户将被授权。

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

答案 1 :(得分:0)

我想出了如何将id安全地发送到我的登录处理程序。我发送signed_request而不是原始user_id。然后我使用app secret来解析将包含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.');
        }
      });
    }