我目前有一个现有的网站登录系统,我想添加用户通过Facebook注册我的网站的功能。
这是我的用户模型的样子。
用户模型:
您可以通过提供电子邮件,电话和密码以常规方式注册。
或者您可以通过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,弹出一个窗口进行身份验证,然后需要您到另一个屏幕输入其余的详细信息,如电话号码。有关如何做到这一点的任何想法?
答案 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.');
}
});
}