Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FB.getLoginStatus返回未知状态_Javascript_Facebook_Facebook Javascript Sdk - Fatal编程技术网

Javascript FB.getLoginStatus返回未知状态

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

使用有效的Facebook应用程序调用FB.getLoginStatus时,响应状态始终未知。确切的响应是{authResponse:undefined,状态:“unknown”}


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没有删除cookie
      fblo
      ,这在某种程度上影响了
      FB.getLoginStatus()
      函数返回
      未知

      修正:在调用
      FB.logout()
      时,您可以通过编程方式删除cookie
      fblo

      对我来说,这意味着“在我的登录页面上”,我需要指定cookies

        window.fbAsyncInit = function() {
         FB.init({
            version: 'v2.8',
            cookie     : true,
          });
        };
      
      但别问我为什么会这样。它还修复了需要点击两次登录按钮才能真正登录的问题,甚至不需要appId,看起来,FWIW…

      最终答案 好吧,我想我终于解决了这个该死的问题

      您需要知道的是:

      1) 您通过应用程序ID向Facebook进行身份验证。这将设置各种cookie,其中您的应用程序ID将在末尾标记:

      • fblo_u000000000000
      • 百万美元
      • fbsr_000000000000
      2) 如果您删除这些cookie,您仍然作为普通用户通过了facebook的身份验证(除非您完全注销)。而且在Facebook的服务器上,他们仍然知道您已获得此应用的授权

      • 因此,当您再次运行
        FB.getLoginStatus()
        时,它只需重新创建它们并将它们放回原处。这不是您的用户所期望的。这很糟糕。他们点击“注销”
      3) 委员会:

      用户要么未登录Facebook,要么已明确注销您的应用程序,因此不会尝试连接到Facebook,因此,我们不知道他们是否已验证您的应用程序。(未知)

      所以他们甚至不去检查这个cookie是否设置好了。这就是为什么会得到null或未定义。因此,
      fblo
      cookie被认为是一种“选择退出”<事实上,你并没有被任何普通人认为是被记录出来的东西记录下来。只有一块饼干说你是
      当然,如果用户使用登录按钮重新登录,那么cookie将被删除,这正是您和您的用户想要的

      因此,我认为唯一有意义的事情(如果您确实需要了解用户的状态)是:

      • 在运行
        FB.getLoginStatus
        之前,手动检查
        fblo\ucode>cookie的存在
      • 如果cookie不存在,则不执行任何操作并运行正常的流
      • 如果cookie确实存在,您有几个选项:
      1) 选择1

      什么也不做。你现在明白了这个问题,你明白了不要删除cookie,也许你不需要做任何事情,除了显示Facebook登录按钮

      2) 选择2

      您假定此人是您应用程序的用户,并执行您需要执行的任何操作以显示UI。但您不会运行完全正常的逻辑-这将是特定于您的应用程序

      3) 选择3

      • 手动将cookie值
        fblo
        设置为
        n
        (而不是“y”)。请记住,此cookie是在您的域上设置的,因此您可以更改它*这取决于您的开发环境,但需要在客户端完成,您可能需要指定“/”的路径和cookie域)
      • 运行
        getLoginStatus(…,true)
        -它现在不会被阻止,因为cookie现在是
        n
        。但是,您不能在此处运行正常逻辑,因为您要做的只是检查该用户是否确实是Facebook用户和/或是否仍然通过应用程序的身份验证
      • 手动将cookie值设置回
        y
      不幸的是,由于奇怪的比赛条件,我不能推荐此解决方案。它几乎可以工作,但FB可能会在任何时候故意或意外地破坏它-实际上,它仍然会在认为你没有登录时感到困惑。此外,它可能会有各种各样的并发症与其他插件,我没有
      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