1

我正在尝试在 Google App Engine 上托管的网络应用程序上检索 Facebook 用户信息。

设置如下: 1. 托管在 Google 的默认 appspot.com 上的 Web 应用程序。2. 注册一个 Facebook 应用程序,并配置为“使用 Facebook 登录的网站”。

我正在使用 FB JavaScript SDK 通过以下简单代码进行身份验证和检索数据:

function login(){
    FB.getLoginStatus(function(r) {
         if(r.status === 'connected') {
                FB.api('/me', function(user) {
                      alert(JSON.stringify(user));
                  });
         }else{
            FB.login(function(response) {
                    if(response.authResponse) {
                        alert("Now.... Thats better with FB!");
                } else {
                    alert("You should connect to FB.");
                }
         });
     }
    });
};

但是,当我从 FB.api(...) 调用返回“用户”响应时,它是以下 JSON:

{"error":{"type":"http", "message":"unknown error"}}

在我的 Facebook 应用程序中,我在 Facebook 应用程序设置的“使用 Facebook 登录的网站”部分中的“站点 URL”指向我的 GAE 应用程序的 https 地址。而且我不确定为什么会出现这样的错误。

我花了很多时间搜索 StackOverflow 和整个网络,但没有提到这一点。有人可以请...真的请帮忙!:)

谢谢你。

4

1 回答 1

2

经过相当多的调查和尝试/错误,我发现了问题所在:) 我login()从 onclick 事件中调用了该函数,如下所示:

<a href='' onclick='login();'>

现在,在我的 login() 中调用的 Facebook 登录对话框由于一个问题(功能?)没有正确返回,直到这个日期我都不知道。我需要添加return false;到 onclick 函数调用的末尾,以确保浏览器执行其关闭打开窗口的默认行为(其中 FB.login 依赖于存储正确的访问密钥)。因此,由于窗口行为不正常,FB.api 没有存储和找到正确的访问密钥,因此调用失败。长话短说,修复就像这样简单:

<a href='' onclick='login();return false;'>

希望这对其他人有帮助。

于 2013-04-18T21:58:14.550 回答