将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>
登录成功后,我想通过传递ID,电子邮件重定向到成员-only.php。在上面的脚本中,我写了window.location.replace('http://www.example.com');而不是example.com,我可以给我的PHP文件名?
appId可以被每个身体看到,那会好吗?或者我们需要保持它的秘密?
如果用户第一次来,我们需要在我们的数据库中注册哪些细节?并从第二次如何识别该用户?
在此先感谢。
window.location.replace('http://www.example.com/members-only.php');
- 这是没有问题的,以使应用程序ID公众。只需小心访问令牌和应用程序的秘密。他们不是公开的。
- 您只需要该ID即可识别用户。其余的由你决定,如果你想缓存它。
如何将id传递给members-only.php?这将是任何Ajax调用?假设ID足以从第二次识别用户,如果我知道我的朋友ID,我可以轻松地通过它并调用members-only.php并获取他的详细信息?这是安全的吗? – Bharath
在members-only.php文件中,你必须检查用户是否被授权。例如,您可以在登录后传递访问令牌给ajax调用并将该令牌存储在会话中。然后重定向到members-only.php,然后在那里查看会话中是否存在令牌并尝试将其与api一起使用(例如,简单地调用/ me端点)。当然,只有当你检查正确的用户服务器端时才是安全的。 – luschn
所以我们将使用access_token来获取id?当然电子邮件和其他细节也。通常,我们将使用id来标识用户。这似乎是我们正在为所有这些乱七八糟的东西,主要是电子邮件。我是对的?如果是这样,我们可以在不到一分钟的时间内获得任何我的Facebook用户的身份证,那么安全性在哪里? – Bharath
你不应该仅仅处理这个客户端 - 使用PHP SDK作为服务器端的一部分,它与JS SDK一起工作(通过共享cookie。) – CBroe
因此,我们将得到id,email和其他细节如果需要,并将它们传递到后端,并存储如果用户第一次来或如果他/她正在返回用户验证我们的数据库中的id和重定向到members-only.php?我们只验证ID?形成回访用户?对不起,很多问题,我第一次执行fb登录,感谢您的帮助。 – Bharath
只将访问令牌发送到服务器,从那里请求任何附加信息。将应用程序范围的用户标识存储在数据库中(VARCHAR或类似的数据类型)。 – CBroe