在签名请求 - Facebook的情况下获取用户ID

时间:2013-07-01 11:08:07

标签: facebook facebook-php-sdk

我知道这可能是重复的问题,但请帮忙。我创建了一个应用程序并将其安装在我的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。

2 个答案:

答案 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"
  })