fb.api 在连接的用户上返回“未定义”

fb.api returns 'undefined' on connected user

本文关键字:未定义 返回 用户 api 连接 fb      更新时间:2023-09-26

下面的代码给了我一个关于名称和电子邮件的"未定义"。但是,用户已登录,因为我确实有访问令牌和 UID?

function getToken(){
    FB.login(function(response) {
        if (response.authResponse) {
            var access_token = response.authResponse.accessToken;
            var uid = response.authResponse.userID;
            document.getElementById('accessToken').value=access_token;
            document.getElementById('uid').value=uid;
            FB.api('/me', function(response) {
                console.log('Good to see you, ' + response.name + '.' +response.email);
            });
            document.forms['token'].submit();
        } else {
            return false;
        }
    }, {scope:'email,user_likes,friends_likes'});
}

当我将 fb.api 的完整响应输出到控制台时,我得到

[11:46:10.369] ({error:"load-error: unknown"})

我现在明白你想做什么和问题了。

失败原因:

您正在发出异步请求(使用 FB.api 方法),然后提交一个表单(这是一个猜测,因为您没有包含所有代码),该表单重新加载整个页面,弄乱了异步请求。

至于如何解决问题:

在我看来,最好的解决方案是使用服务器端身份验证过程,然后才在画布加载时使用客户端 sdk。这样,你将在客户端和服务器端拥有访问令牌。

另一种方法是不提交表单,而是使用访问令牌向服务器(可以在 POST 中)发出 ajax 请求,因为两个请求都是异步的(FB.api 和到您的服务器的请求)一切都应该正常。

我认为快速解决方法是在FB.api函数中提交表单。所以它看起来像:

FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.' +response.email);
            document.forms['token'].submit();
});