为什么Facebook javascript sdk登录代码会一次又一次地自动记录用户日志?
在这里,我无法让一个用户在按下注销按钮后从我的网站注销。他被重定向到登录页面,但updateButton函数被再次调用,其凭据与他再次登录时的凭据相同。我尝试了几种方法,但问题仍然存在。我猜我在updateButton函数中没有正确地执行操作,而且FB.logout也没有正确地执行,因为我在控制台中没有访问令牌的情况下调用了错误FB.logout。 守则如下:为什么Facebook javascript sdk登录代码会一次又一次地自动记录用户日志?,javascript,facebook,facebook-javascript-sdk,Javascript,Facebook,Facebook Javascript Sdk,在这里,我无法让一个用户在按下注销按钮后从我的网站注销。他被重定向到登录页面,但updateButton函数被再次调用,其凭据与他再次登录时的凭据相同。我尝试了几种方法,但问题仍然存在。我猜我在updateButton函数中没有正确地执行操作,而且FB.logout也没有正确地执行,因为我在控制台中没有访问令牌的情况下调用了错误FB.logout。 守则如下: $(function(){ var button; windo
$(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.logout。由于状态设置为true,原因可能是什么。如果当前用户已登录Facebook,则会强制其自动登录网站。当我看到这篇文章时,它证实了我一直以来的想法,即我的注销操作不正确。如果那样做的话,我会没事的
以下是为我完成此操作的注销功能代码:-
function logout(response){
if(!response.authResponse){
window.location = "/web/login/";
return;
}
FB.logout(function(response){
FB.Auth.setAuthResponse(null,'unknown');
logout(response);
});
}
正如上面的链接所说,我们应该一直发送注销请求,直到它在Facebook端被销毁。我做了一个递归调用,解决方法是当检查确认它时
我是一个noob,如果有人在目前的解决方案中构建一个更优雅的hack,我会很高兴
也要感谢ZeNy。无论如何,使用FB.logout不是一个好主意,除非你想强迫用户从Facebook而不是你的网站注销 关于弹出窗口,我认为这是因为FB.getLoginStatusupdateButton;它在每次加载页面时调用函数updateButton
您应该通过onclick函数来改进它。我冒昧地重写了您的代码,保留了您的基础:
// 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));
-
我面临的另一件事是,当我第一次加载我的站点时,弹出窗口会自动出现。我尝试过将status=false设置为false,但没有成功,所以我认为我的注销,即函数logoutresponse{FB.logoutfunctionresponse{console.logUser现在已注销;};}不正确。在控制台中,它显示在没有访问令牌的情况下调用了FB.logout。原因可能是什么?谢谢你,泽尼。但是我尝试过设置status=false,但这对我不起作用。关于pop按钮,button.onclick处理程序将是一个好主意,但我觉得如果我能够在updateButton函数中正确设置if-else条件,那么这个问题也会得到解决。你说呢?如果我把FB.Auth.setAuthResponsenull放在'unknown'上是否正确;注销;在其他功能下,而不是FB.logout.Thank Alexis'ZeNy'Bize。我很高兴。为什么你没有在fb-init.jsI中设置oauth:true呢?我从来没有使用过oauth变量,也没有在当前的文档中看到它:-我认为它现在没用了:也许我错了,但它就像一个没有任何属性的符咒一样工作。不客气,无论如何你应该改进我的代码,例如,我忘记了这一点,如果用户没有连接到Facebook,FB.getLoginStatus将返回false;它是两年前发布的。现在,如果没有它,你会得到同样的回答;最好的方法是将«else if responseStatus.status==='not_authorized'»替换为«else»,并删除另一个;
// 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) {
});
});