1

对于我的网站,我使用 Facebook 登录。使用该$facebook->getUser()功能,我可以将用户从登录页面(主页)重定向到您登录时看到的第一页。

结果$facebook->getUser()是 0 或用户 ID。该值似乎存储在域 Cookie 中(不是会话 Cookie,因此在完全关闭并重新打开浏览器时不会删除它)。这是使用完整的,因为我的页面不必与 Facebook 连接就可以知道用户的 ID。

然而,用户可以删除它的所有 Cookie,从而让$facebook->getUser()函数返回 0,即使用户已经接受了应用程序(可以在https://www.facebook.com/settings?tab=applications中找到)

我还尝试使用以下内容:

$accessToken = $this->facebook->getAccessToken();
$facebook->api('/me?access_token=' . $accessToken, 'GET');

然而,这一直给我错误An active access token must be used to query information about the current user。从用户的$this->facebook->getAccessToken()应用程序返回 AccessToken,所以这无济于事:(

现在我的页面不知道用户已经与 facebook 连接,所以它打开login-page。这里//connect.facebook.net/en_US/all.js已加载,我可以提出FB.getUserID()请求。

现在问题和奇怪的部分:

window.fbAsyncInit函数完成并异步加载 SDK时

 (function(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); }(document));

我运行FB.getUserID(). 这将返回 Nothing。但是大约 100-700 毫秒后,它确实返回了 fb-id(如果我再次请求它)。所以Javascript 以某种方式从 facebook 获取了我的 fb-id而没有使用我的域 cookie

当我使用 Chrome 中的 Inspector 并打开 Network 时,我可以看到,在所有内容都应该加载和完成之后,页面xd_arbiter.php?version=19 (static.ak.facebook.com/connect)正在被请求和加载。同样重要的是oauth?client_id=***&response_type=*** (www.facebook.com/dialog)

看来这个 javascript 请求可以从 Facebook 获取 fb-id。

我希望能够使用 PHP 来做到这一点,因此用户不必看到登录页面大约 1 或 2 秒。

我希望我解释得足够好,如果没有,请要求澄清。我非常想解决这个问题!=)

4

0 回答 0