facebook-> getUser () возвращать всегда 0 - PullRequest
1 голос
/ 02 апреля 2012

У меня та же проблема, что и у многих других, что метод getUser () в php-sdk всегда возвращает ноль. Я выясняю, что причиной этого является условие в методе parseSignedRequest ().

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

Условие всегда верно. Когда я раскомментирую это условие, оно работает нормально. Я получаю правильного пользователя, и я также могу получить токен со всеми разрешения, где я прошу.

Но мне стало не по себе от этого грязного решения. Почему это может быть? Возможно, на сервере неверная конфигурация.

С уважением

1 Ответ

0 голосов
/ 09 апреля 2012

У меня точно такая же проблема ... Мне понадобилось 4 дня, чтобы отследить ее ...

Вот результат моего отладочного эха условного выражения, в котором вы сравниваете $ 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);

возвращает неправильный хеш!

НО ПОЧЕМУ?

Простой ответ: плохо сформированныйконфиг арray ...

Используя "$ 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

ожидаемый sig: r�0��g% ���ͦ��w� (�B ^ ���Ddv

Теперь они совпадают ...

Короче говоря ... сделайте phpinfo (), чтобы убедиться, что вы получаете токен подписанного запроса)... если вы уверены, что получаете это (или "$ REQUEST [fbsr #######]")) ... если вы уверены, что вы получите закодированный со знакомзапрос ... единственная причина, по которой ваш хеш не будет совпадать, это если вы не получили верный секрет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...