为什么这个Facebook javascript-sdk登录代码会一次又一次地自动登录用户
Why this Facebook javascript-sdk login code is automatically logging the user again and again?
在这里,一旦用户从我的网站按下注销按钮,我就无法让用户注销。他被重定向到登录页面,但是再次调用updateButton函数,并使用他再次登录的相同凭据。我尝试了几种方法,但问题仍然存在。我想我没有在updateButton函数中做正确的事情,FB.logout()也没有正确完成,因为我得到了错误"FB"。在控制台中,在没有访问令牌的情况下调用注销。代码如下:-
$(function(){
var button;
window.fbAsyncInit = function(){
FB.init({ appId : 'myAppId',
status : true,
cookie : true,
xfbml : true,
oauth : true
});
function updateButton(response) {// I am not sure I am doing it right here
console.log("Update Button Fired.");
console.log(response);
button = document.getElementById('fb-auth');
if(response.status === 'connected')
{
FB.api('/me', function(info)
{
login(response,info);
});
}
else
{
FB.login(function(response)
{
if(response.status === 'not_authorized')
{
FB.api('/me', function(info){
login(response, info);
});
}
else
{
}
}, {scope:'email, user_birthday,user_about_me' });
}
}
}
FB.getLoginStatus(updateButton);
FB.Event.subscribe('auth.statusChange', updateButton);
};
(function() {
var e = document.createElement('script');
e.async = true;
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
})();
function login(response,info){
console.log('login Showloader called');
if (response.authResponse) {
var accessToken = response.authResponse.accessToken;
$.post("/web/register/faceBookRegistration",{ data:info,accessTokenValue:accessToken}).done( function(data){
if(typeof(data) != undefined){
window.location = "/web/login/loadViewFaceLogin";
}
});
}
}
function logout(response){
FB.logout(function(response){
console.log("User is now logged out");
});
}
});
我想我的登出也就是
function logout(response){
FB.logout(function(response){
console.log("User is now logged out");
});
}
不正确。在控制台中显示FB。在没有访问令牌的情况下调用注销。
我冒昧地重写了你的代码,保留了你的基:
// File - fb-init.js
window.fbAsyncInit = function() {
FB.init({
appId : app_id,
status : false,
cookie : true,
xfbml : true
});
};
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
// File - main.js
$('#fb-login').on('click', function() {
FB.getLoginStatus(function(responseStatus) {
if (responseStatus.status === 'connected') {
FB.api('/me', function(responseMe) {
if (!responseMe.id)
return false;
var accessToken = responseMe.authResponse.accessToken;
$.post('/web/register/faceBookRegistration' {
data : responseMe,
accessTokenValue : accessToken
}).done(function(data) {
if (typeof(data) !== 'undefined')
window.location = '/web/login/loadViewFaceLogin';
});
});
}
else if (responseStatus.status === 'not_authorized') {
FB.login(function(responseLogin) {
FB.api('/me', function(responseMe) {
if (!responseMe.id)
return false;
var accessToken = responseMe.authResponse.accessToken;
$.post('/web/register/faceBookRegistration' {
data : responseMe,
accessTokenValue : accessToken
}).done(function(data) {
if (typeof(data) !== 'undefined')
window.location = '/web/login/loadViewFaceLogin';
});
});
}, {scope:'email, user_birthday,user_about_me' });
}
else
return false;
});
});
$('#fb-logout').on('click', function() {
FB.logout(function(responseLogout) {
});
});
由于状态设置为true。如果当前用户已经登录了Facebook,它会强制他在网站上自动登录。
无论如何,使用FB.logout()不是一个好主意,除非您想强制用户从Facebook(而不是您的网站)注销。
关于弹出,我认为这是因为FB.getLoginStatus(updateButton);它在每次页面加载时调用updateButton()函数。
你应该通过onclick功能来改进它
当我看到这个Post FB.logout()调用没有访问令牌时,它证实了我一直在我的脑海中,我的Logout没有正确完成。如果那件事完成了,我就没事了。
这是注销函数代码,它为我做了:-
function logout(response){
if(!response.authResponse){
window.location = "/web/login/";
return;
}
FB.logout(function(response){
FB.Auth.setAuthResponse(null,'unknown');
logout(response);
});
}
正如上面的链接所说,我们应该继续发送注销请求,直到它在Facebook端被销毁。我做了一个递归调用,当检查确认时,就可以退出。
我是一个新手,如果有人在目前的解决方案上建立一个更优雅的hack,我会很高兴。
感谢'ZeNy' too.
相关文章:
- 一次又一次地在新的和相同的选项卡中打开一个url
- 如何初始化一次并将相同的值一次又一次地传递给另一个函数
- 流星回拨天堂回拨一次又一次
- 一次又一次地调用功能
- 如何阻止网页在到达底部后一次又一次地自动滚动
- 杜兰达尔 2.0.1,尝试激活一次又一次地被调用
- 在滚动时没有获取新数据,而是在滚动时一次又一次地添加相同的 json 数据
- 如何修复此代码以显示 10 秒并一次又一次地永远隐藏 10 秒
- 可以一次又一次地使用 ng 重复吗?
- 为什么警报框一次又一次地出现
- 如何在HTML5网页中本地保存数据,这样我们就不需要一次又一次地从服务器获取
- jQuery一次又一次地调用该函数
- 使用 JavaScript 一次又一次地在画布上编写文本
- Ajax Authorization Request标头一次又一次地失败
- 将相同的选项一次又一次地传递给jQuery函数
- 使用JQuery'加载HTML;s在一次又一次地删除HTML后多次执行getScript
- AJAX一次又一次地加载iFrame
- 即使用户一次又一次地输入同一封电子邮件,代码也不会停止提交表单
- Javascript图像选择器:防止一次又一次地选择相同的图像
- 为什么这个Facebook javascript-sdk登录代码会一次又一次地自动登录用户