Ошибка facebook 'Ошибка проверки кода проверки'
очень странная ошибка. Я использую gide http://developers.facebook.com/docs/authentication/. поэтому я создаю запрос к fb и передаю redirect_uri. Я использую тестовый сайт на localhost. поэтому, если я передаю
redirect_uri = http://localhost/test_blog/index.php
он отлично работает, но если я прохожу
redirect_uri = http://localhost/test_blog/index.php?r=site/oauth2
он не хочет работать. я пытаюсь использовать
redirect_uri =. urlencode ('http://localhost/test_blog/index.php?r=site/oauth2)
но не работает.
я пытаюсь объяснить. я получаю код, но когда я обращаюсь к https://graph.facebook.com/me?access_token, я получаю сообщение об ошибке "Ошибка проверки кода проверки". я проверил evering, ошибка в ? r = site/oauth2, но мне нужно передать некоторые параметры
может кто-нибудь мне помочь?
я читаю сообщение http://forum.developers.facebook.net/viewtopic.php?id=70855, но ничего не работает для меня
Ответы
Ответ 1
В настоящее время (по состоянию на март 2011 года) имеются недокументированные требования относительно того, что делает действительным redirect_uri.
Во-первых, оба параметра redirect_uri для авторизации и access_token должны соответствовать.
По-видимому, Facebook (или, скорее, OAuth2) использует redirect_uri в качестве внутреннего ключа для кодирования кода, возвращаемого для запроса access_token. Это своего рода умный, так как он проверяет ваш сайт. Это объясняет, почему запрос access_token, который иначе не нуждается в параметре redirect_uri, требует одного.
Во-вторых, вы не можете использовать много специальных символов в redirect_uri.
Много обсуждается, могут ли параметры вообще передаваться. Они могут, вы ограничены, какие символы действительны, но никто не опубликовал список, который я знаю. Традиционные методы, такие как кодировка url/html, не будут выполнены, потому что процент (%) недействителен. Слэш (/) недействителен либо так, что вложенный URL перенаправления всегда будет терпеть неудачу. Единственным способом преодоления специального ограничения char является кодирование значения параметра base64. Если вы используете ASP.NET, посмотрите Convert.ToBase64.
Наконец, и это скорее примечание. Есть много программистов, проходящих мимо дезинформации, что простым решением является передать тип = client_cred. Это может ограничить ваш доступ к некоторым разрешениям, которые вы запрашивали при авторизации. Это нецелесообразно.
Ответ 2
Была та же проблема в течение всего дня при тестировании с redirect_uri=http://localhost:8000
(закодирована до http%3A%2F%2Flocalhost%3A8000
)...
Решение заключалось просто в том, чтобы положить конечную косую черту /
в конец uri. Итак redirect_uri=http://localhost:8000/
(закодировано до http%3A%2F%2Flocalhost%3A8000%2F
).
Снова, убедитесь, что redirect_uri
идентичен для обоих запросов.
Ответ 3
У меня была эта проблема. Я знал, что мои URL-адреса были одинаковыми, потому что я использовал класс с тем же $var, но я продолжал получать ответ 400 и эту ошибку в ответе JSON.
Единственное, что я сделал, это изменить мою redirect_uri:
http://myredirecturi.com
к
http://myredirecturi.com/
Yeh, просто добавил конечную косую черту, и она сработала.
Ответ 4
Вам действительно не нужно кодировать, просто поместите '/' в конец вашего redirect_url, и все будет хорошо!
Ответ 5
Часть информации, предоставленной Аароном Уилером, неверна.
Верно, что параметр "redirect_uri" должен быть идентичным в обоих запросах, однако вполне возможно URL-адрес кодирования регулярного URL и использовать его как значение для параметра redirect_url, до тех пор, пока вы будете осторожны с дальнейшим URL-кодированием любых встроенных URL-адресов.
Например, вы хотите, чтобы facebook перенаправлялся на следующий URL-адрес:
http://www.mysite.com/Users/oAuthComplete?my_param_1=/Party/pants
Попытка перенаправить пользователя на
'https://www.facebook.com/dialog/oauth?client_id=12345&redirect_uri='
. urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1=/Party/pants');
Ошибка, если /Party/Pants
создает недопустимый URL
Однако перенаправление на
'https://www.facebook.com/dialog/oauth?client_id=12345&redirect_uri='
.urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1='
.urlencode('/Party/pants'));
Будет работать как ожидалось.
Если вы используете возвращаемое значение redrect_uri во втором, выполните проверку подлинности запроса приложения, убедитесь, что URL-адрес снова закодирован - значение автоматически преобразуется в URL-адрес при заполнении супергеллона $_GET. - Это то, что сбило меня с толку.
'https://graph.facebook.com/oauth/access_token?client_id=12345&&client_secret=SECRET&code=1234567'
.urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1='
.urlencode($_GET['my_param_1']));
P.s. В вашем фактическом коде я бы рекомендовал использовать sprintf() вместо связывания строки вместе, как в моем примере, для лучшей читаемости.
Ответ 6
Из того, что я вижу, проблема в том, что redirect_uri должен заканчиваться на "/" и не содержать "?" или других специальных символов. Я думаю, именно поэтому вы получаете "Ошибка проверки кода проверки". Эта ошибка появляется только в том случае, если вы используете file_get_contents(), а не при использовании библиотеки php facebook.
Это решение для php, не знаю, появляется ли эта ошибка в других SDK.
Ответ 7
Я не уверен, что это поможет, но я бы предложил кодировать только значения в URL-адресе. Не все. например:
redirect_uri='http://localhost/test_blog/index.php?r='.urlencode('site/oauth2');
Ответ 8
Я имел pb и, наконец, исправил его, добавив параметр type = client_cred в url.
Ответ 9
У меня была такая же проблема.
По общему признанию, я супер n00b, поэтому извините меня, если это решение не имеет никакого смысла в реальной практике.
Я просто установил короткий файл cookie-предохранителя (1-2 мин) с тестовой переменной на странице с помощью моей кнопки FB Connect. Когда FB вернулась с информацией в мой синтаксический анализ/обработку данных script, я проверил этот файл cookie, где я перенаправлял его, и, если он найден, направил пользователя на правильный URL-адрес, используя заголовок: location.
Конечно, некоторые браузеры/пользователи и т.д. отключают файлы cookie. Это, очевидно, не работает (возможно, использовать сеанс var и уничтожить его в обработчике данных fb?) Я уверен, что есть лучший способ сделать это, но на данный момент эта бандада работает.
Ответ 10
Я заметил, что вы используете Yii, который я использую, и у меня была такая же проблема в течение половины дня. Как уже упоминалось, проблема заключается в специальных символах вашего URL i.e. r=site/oath2
Вы можете исправить это, включив симпатичные URL-адреса в свой конфиг, чтобы ваш URL стал index.php/site/oath2
Кажется, что он работает без конечной черты.
Ответ 11
Ответ для меня был следующим:
$user = $facebook->getUser();
if (!$user) {
$loginUrl = $facebook->getLoginUrl(array(
'scope' => '',
'redirect_uri' => $this->domain,
));
print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
}
Я долго пробивал себе голову, прежде чем нашел это решение, похоже, что я не единственный, у кого эта проблема. Надеюсь, это сработает для вас!