我知道这可能是重复的问题,但请帮忙。我创建了一个应用程序并将其安装在我的Facebook页面上。当我使用身份验证方法对其进行身份验证时,我的问题是我获得了用户ID ...但是当我通过正确的签名请求方法时(即,当我仅使用facebook网站登录时)。我没有得到用户。当我使用facebook网站登录时,如何在签名请求的情况下获得用户ID。
我的签名请求。
$facebook = new Facebook(array(
'appId' => '****',
'secret' => '****',
'cookie' => true,
));
echo 'User ID :- ' . $user = $facebook->getUser();
$signed_request = $facebook->getSignedRequest();
echo '<pre>';
print_r($signed_request);
echo '</pre>';
User ID :- 0
Array (
[algorithm] => HMAC-SHA256
[issued_at] => 1372676199
[page] => Array
(
[id] => 544896778905441
[liked] =>
[admin] => 1
)
[user] => Array
(
[country] => in
[locale] => en_US
[age] => Array
(
[min] => 21
)
)
)
如何获取用户ID。
答案 0 :(得分:0)
**编辑** 截至几个月前(2014年12月),Facebook不再允许Like-Gating内容。我猜这就是为什么有人会出现负面投票并链接到自己的答案。所以下面不再有效
为已授权应用的用户获取signed_request(这是您的第一种情况)和从页面应用上的已签名请求获取用户ID之间存在差异。在第二个示例中,您可以测试用户是否喜欢您的页面,但您无法获得特定的用户ID。他们只是与您的网页进行互动 - 是的,他们可能会登录到Facebook,但他们没有明确授权您的应用。我认为这就是“仅使用Facebook网站登录”的意思
如果你看https://developers.facebook.com/docs/reference/login/signed-request/,你会看到它陈述
Some fields and values, the user_id and oauth_token for example will only be passed if the user has logged into your app.
他们可能已登录Facebook,但尚未登录/授权您的应用
答案 1 :(得分:-1)
您可以在此处按照有关如何解码签名请求的说明进行操作 https://developers.facebook.com/docs/facebook-login/using-login-with-games#parsingsr
OR
您可以使用我创建的服务。它将返回已解码的签名请求:)
https://websta.me/fbappservice/parseSignedRequest/<concat signed request here>
// angularjs
you may get it via $http.jsonp(url);
// jquery //在获取jsonp请求时引用jquery文档
$.getJSON( url, {
format: "json"
})