4

下面的代码在名称和电子邮件上给了我一个“未定义”。但是用户登录是因为我确实有访问令牌和 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"})
4

2 回答 2

1

我现在看到你正在尝试做的事情和问题。

为什么会失败:

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

至于如何解决问题:

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

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

于 2012-04-06T11:53:46.023 回答
0

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

FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.' +response.email);
            document.forms['token'].submit();
});
于 2013-12-17T19:48:27.083 回答