温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Facebook social login shows conflicting information AND javascript SDK is buggy?
facebook facebook-graph-api facebook-javascript-sdk facebook-login

其他 - Facebook社交登录显示有冲突的信息,而javascript SDK有问题吗?

发布于 2020-04-13 13:47:25

我直接使用来自Facebook文档的代码:https : //developers.facebook.com/docs/javascript/quickstart/

<body>
    <script>
        //this gets called immediately after sdk.js loads 
        window.fbAsyncInit = function() {

            FB.init({
                appId            : '12345...MYIDHERE...6789',
                autoLogAppEvents : true,
                xfbml            : true,
                version          : 'v5.0'
            });

            //check if user is logged in...
            FB.getLoginStatus(function (response) {   
                    console.log('initial-check:', response);
            });
        };

        //check if user is logged in... - AFTER facebook Login Popup returns.
        function callback_afterLogin() {
            FB.getLoginStatus(function (response) {   
                console.log('callback_afterLogin:', response);
            });
        }
    </script>
    <script async defer src="https://connect.facebook.net/en_US/sdk.js"></script>

    <div class="fb-login-button" 
        data-size="large"
        data-button-type="login_with" 
        data-auto-logout-link="true"
        onlogin="callback_afterLogin"
        data-use-continue-as="false">
    </div>

</body>

fb-login-按钮呈现为“注销”,这向我指示该按钮检测到我已登录Facebook以及应用程序本身。

问题是FB.getLoginStatus()response.status ==='未知'!为什么呢 我希望它显示为“已连接”。按钮清楚地知道我已连接,然后状态为何与此矛盾。

在此处输入图片说明

此外,我然后注销,该按钮更改为“使用Facebook登录”;然后我尝试重新登录,这显示了Facebook Popup窗口;输入正确的电子邮件/密码组合后,单击“登录”,我返回到我的应用程序页面,但打开登录回调函数(onlogin =“ callback_afterLogin”)两次!第一次,它显示正确的[状态:“已连接”],但是第二次它显示[状态:“未知”],使我看起来已经注销了。它应该没有理由发射两次?!

在此处输入图片说明

此外,还有一个源自facebook sdk.js的.toLowerCase()错误(请参阅第二个屏幕截图)。

查看更多

提问者
joedotnot
被浏览
37
joedotnot 2019-12-18 18:39

您仍然可以将HTTP与“ localhost”地址一起使用,但前提是您的应用仍处于开发模式。

以上报价来自Facebook员工,网址https://developers.facebook.com/blog/post/2018/06/08/enforce-https-facebook-login/

我依靠它是真实的,但是显然它不应该被信任,并且是我的问题中记录的怪异行为的原因。

一旦我开始使用HTTPS(https:// localhost),sdk库就会表现得更好:

  • 初始状态现在为“已连接”
  • 回调仍然触发两次,但是两次状态均为“已连接”

在两次触发两次回调之间会出现一个新的错误消息:

您正在覆盖当前的访问令牌,这意味着其他一些应用程序期望使用不同的访问令牌,并且您可能会破坏事情。请考虑将access_token直接传递给API参数,而不是覆盖全局设置。

我略微调整了代码,认为这样可以解决两次触发问题:

//check if user is logged in... - AFTER facebook Login Popup returns.
function callback_afterLogin(response) {
    //REMOVED FB.getLoginStatus call, added `response` parm to callback signature
    console.log('callback_afterLogin:', response );
}

但是它并没有改变,仍然连续触发两次,中间有错误消息。如果您知道为什么会触发两次,请发布您的解决方案。

还请注意,在某些情况下,.toLowerCase()错误仍然存​​在。