Javascript FB.getLoginStatus返回未知状态
使用有效的Facebook应用程序调用FB.getLoginStatus时,响应状态始终未知。确切的响应是{authResponse:undefined,状态:“unknown”}Javascript FB.getLoginStatus返回未知状态,javascript,facebook,facebook-javascript-sdk,Javascript,Facebook,Facebook Javascript Sdk,使用有效的Facebook应用程序调用FB.getLoginStatus时,响应状态始终未知。确切的响应是{authResponse:undefined,状态:“unknown”} window.fbAsyninit=函数(){ init({appId:'1484134468466778',状态:true,cookie:true,xfbml:true}); FB.getLoginStatus(函数(响应){ 控制台日志(响应); }); }; (职能(d){ var js,id='facebo
window.fbAsyninit=函数(){
init({appId:'1484134468466778',状态:true,cookie:true,xfbml:true});
FB.getLoginStatus(函数(响应){
控制台日志(响应);
});
};
(职能(d){
var js,id='facebook jssdk';if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
d、 getElementsByTagName('head')[0].appendChild(js);
}(文件);
示例URL:
这里是Facebook应用程序设置的屏幕截图。
当我检查时,状态显示为“未授权”,这很好,因为我还没有授权该应用程序 要完成此流程,您应该在用户id未经授权或未登录facebook时添加
FB.login
:
window.fbAsyncInit = function(){
FB.init({ appId:'{APP-ID}', status:true, cookie:true, xfbml:true});
FB.getLoginStatus(function(response){
if (response.status === 'connected') {
//proceed
} else if (response.status === 'not_authorized') {
login();
} else {
login();
}
});
};
function login(){
FB.login(function(response) {
if (response.authResponse) {
// proceed
} else {
// not auth / cancelled the login!
}
});
}
这是在Chrome中发生的,因为Chrome被配置为阻止第三方cookie和数据 一旦我改变了配置,FaceBook就可以让我毫无问题地登录我的应用程序
- Chrome设置
- 显示高级设置…
- 隐私
- 内容设置…
- 取消选中阻止第三方cookie和站点数据
- 我在IE中也遇到了同样的问题。Flimzy的回答引起了我的思考。我试着以管理员的身份运行IE,它成功了。我也遇到了同样的问题,我通过清除所有缓存和cookie来解决这个问题。我在Chrome中也遇到了这个问题。然而,在Firefox中,当用户之前登录时,它的状态返回为
connected
我从对类似问题的回答中找到了一条线索
此问题的根本原因是,在FB.logout()
上,Chrome没有删除cookiefblo
,这在某种程度上影响了FB.getLoginStatus()
函数返回未知
修正:在调用FB.logout()
时,您可以通过编程方式删除cookiefblo
对我来说,这意味着“在我的登录页面上”,我需要指定cookies
window.fbAsyncInit = function() {
FB.init({
version: 'v2.8',
cookie : true,
});
};
但别问我为什么会这样。它还修复了需要点击两次登录按钮才能真正登录的问题,甚至不需要appId,看起来,FWIW…最终答案
好吧,我想我终于解决了这个该死的问题
您需要知道的是:
1) 您通过应用程序ID向Facebook进行身份验证。这将设置各种cookie,其中您的应用程序ID将在末尾标记:
- fblo_u000000000000
- 百万美元
- fbsr_000000000000
- 因此,当您再次运行
时,它只需重新创建它们并将它们放回原处。这不是您的用户所期望的。这很糟糕。他们点击“注销”FB.getLoginStatus()
fblo
cookie被认为是一种“选择退出”<事实上,你并没有被任何普通人认为是被记录出来的东西记录下来。只有一块饼干说你是当然,如果用户使用登录按钮重新登录,那么cookie将被删除,这正是您和您的用户想要的
因此,我认为唯一有意义的事情(如果您确实需要了解用户的状态)是:
- 在运行
之前,手动检查FB.getLoginStatus
fblo\ucode>cookie的存在
- 如果cookie不存在,则不执行任何操作并运行正常的流
- 如果cookie确实存在,您有几个选项:
- 手动将cookie值
设置为fblo
(而不是“y”)。请记住,此cookie是在您的域上设置的,因此您可以更改它*这取决于您的开发环境,但需要在客户端完成,您可能需要指定“/”的路径和cookie域)n
- 运行
-它现在不会被阻止,因为cookie现在是getLoginStatus(…,true)
。但是,您不能在此处运行正常逻辑,因为您要做的只是检查该用户是否确实是Facebook用户和/或是否仍然通过应用程序的身份验证李>n
- 手动将cookie值设置回
y
FB.logout(function(response) {
deleteCookie("fblo_" + fbAppId); // fblo_yourFBAppId. example: fblo_444499089231295
});
function deleteCookie(name) {
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
window.fbAsyncInit = function() {
FB.init({
version: 'v2.8',
cookie : true,
});
};
settings > advanced > site settings > Cookies and site data