【问题标题】:facebook->getUser() give back always 0facebook->getUser() 总是回馈 0
【发布时间】:2012-04-02 14:57:04
【问题描述】:

我和许多其他人一样有同样的问题,php-sdk 中的 getUser() 方法总是返回零。 我发现造成这种情况的原因是方法 parseSignedRequest() 中的一个条件。

if ($sig !== $expected_sig) {
  self::errorLog('Bad Signed JSON signature!');
  return NULL;
}

条件总是正确的。当我取消注释此条件时,它工作正常。我得到了正确的用户,我还可以在我要求的所有许可下获取令牌。

但我对这种肮脏的解决方案感到不舒服。为什么会这样。服务器上是否可能存在错误配置。

亲切的问候

【问题讨论】:

    标签: oauth facebook-php-sdk


    【解决方案1】:

    我遇到了完全相同的问题..我花了 4 天时间才找到它...

    这是我对条件的调试回显的结果,您将 $sig 与 $expected_sig 进行比较。

    sig: [�ꢖ�b��u����f�^��4֣�GP�

    预期信号:��{��.��nwW�:�r��B�����C8$��%F

    因此,由于某种原因,发送的签名与任何预期的编码签名都不匹配。

    所以我想知道...这里有什么问题?

    即使我在我的配置中正确设置它,我是否也没有传递正确的“秘密”?

    require_once("facebook.php");
    
    $config = array();
    $config[‘appId’] = $APP_ID;
    $config[‘secret’] = $APP_SECRET;
    $config[‘fileUpload’] = false; // optional
    
    $facebook = new Facebook($config);
    

    事实证明,当我使用

    $facebook->getAppID();
    

    $facebook->getAppSecret();
    

    没有返回任何东西!

    这就是为什么我的 getSignedRequestCookieName() 函数只返回“fbsr_”

    这就是为什么

    $expected_sig = hash_hmac('sha256', $payload,
                              $facebook->getAppSecret(), $raw = true);
    

    返回错误的哈希值!

    但是为什么?

    简单的答案:格式错误的配置数组...

    使用 "$config['appId'] = $APP_ID;"... 注意 "appId" 周围的引号。这是从 facebook 开发者文档中的文档/示例直接复制/粘贴的。

    用标准双引号替换那些引号

    $config = array();
    $config["appId"] = $APP_ID;
    $config["secret"] = $APP_SECRET;
    $config["fileUpload"] = false; // optional
    

    ...结果如下:

    sig: r�0��g%���ͦ��w�(�B^���Ddv

    预期信号:r�0��g%���ͦ��w�(�B^���Ddv

    它们现在匹配...

    长话短说...做一个 phpinfo() 来确保你得到一个 signed_request 令牌......如果你确定你得到了那个(或“$REQUEST[fbsr #######]" var)...如果您确定收到的是经过编码的签名请求...您的哈希值不匹配的唯一原因是您没有获得正确的秘密在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 2013-10-03
      • 2014-03-24
      • 2011-10-11
      相关资源
      最近更新 更多