将Facebook登录添加到网站的正确方法

问题描述:

我想将Facebook登录添加到我的网站,我的脚本工作正常,但我不确定这种方式是否正确,您是否可以验证并建议如果我做错了。我有几个问题。将Facebook登录添加到网站的正确方法

脚本:

function statusChangeCallback(response) 
    { 
    if (response.status === 'connected') { 
     testAPI(); 
    } else if (response.status === 'not_authorized') { 
     console.log('still not authorized!'); 
    } else { 
     console.log("not connected, not logged into facebook, we don't know"); 
    } 
    } 

    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'APP_ID', 
     cookie  : true, 
     xfbml  : true, 
     version : 'v2.8' 
    }); 
    checkLoginState(); 
    FB.AppEvents.logPageView(); 
    }; 

    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

    function checkLoginState() { 
     FB.getLoginStatus(function(response) { 
     statusChangeCallback(response); 
    }); 
    } 

    function testAPI() { 
    console.log('Welcome! Fetching your information.... '); 
    FB.api('/me', { fields: 'name,email,gender' }, function(response) { 
     console.log('Successful login for: ' + response.name); 
     document.getElementById('status').innerHTML = 
     'Thanks for logging in, ' + response.name + '!'; 
     window.location.replace('http://www.example.com'); 
    }); 
    } 

按钮显示:

<div class="fb-login-button" data-onlogin="checkLoginState()" data-max-rows="1" data-size="medium" data-button-type="login_with" data-show-faces="false" data-auto-logout-link="false" data-login-text="Sign in with Facebook"></div> 
  1. 登录成功后,我想通过传递ID,电子邮件重定向到成员-only.php。在上面的脚本中,我写了window.location.replace('http://www.example.com');而不是example.com,我可以给我的PHP文件名?

  2. appId可以被每个身体看到,那会好吗?或者我们需要保持它的秘密?

  3. 如果用户第一次来,我们需要在我们的数据库中注册哪些细节?并从第二次如何识别该用户?

在此先感谢。

+0

你不应该仅仅处理这个客户端 - 使用PHP SDK作为服务器端的一部分,它与JS SDK一起工作(通过共享cookie。) – CBroe

+0

因此,我们将得到id,email和其他细节如果需要,并将它们传递到后端,并存储如果用户第一次来或如果他/她正在返回用户验证我们的数据库中的id和重定向到members-only.php?我们只验证ID?形成回访用户?对不起,很多问题,我第一次执行fb登录,感谢您的帮助。 – Bharath

+0

只将访问令牌发送到服务器,从那里请求任何附加信息。将应用程序范围的用户标识存储在数据库中(VARCHAR或类似的数据类型)。 – CBroe

  1. window.location.replace('http://www.example.com/members-only.php');
  2. 这是没有问题的,以使应用程序ID公众。只需小心访问令牌和应用程序的秘密。他们不是公开的。
  3. 您只需要该ID即可识别用户。其余的由你决定,如果你想缓存它。
+0

如何将id传递给members-only.php?这将是任何Ajax调用?假设ID足以从第二次识别用户,如果我知道我的朋友ID,我可以轻松地通过它并调用members-only.php并获取他的详细信息?这是安全的吗? – Bharath

+0

在members-only.php文件中,你必须检查用户是否被授权。例如,您可以在登录后传递访问令牌给ajax调用并将该令牌存储在会话中。然后重定向到members-only.php,然后在那里查看会话中是否存在令牌并尝试将其与api一起使用(例如,简单地调用/ me端点)。当然,只有当你检查正确的用户服务器端时才是安全的。 – luschn

+0

所以我们将使用access_token来获取id?当然电子邮件和其他细节也。通常,我们将使用id来标识用户。这似乎是我们正在为所有这些乱七八糟的东西,主要是电子邮件。我是对的?如果是这样,我们可以在不到一分钟的时间内获得任何我的Facebook用户的身份证,那么安全性在哪里? – Bharath