Подтвердить что ты не робот

Ошибка 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, но ничего не работает для меня

4b9b3361

Ответ 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>');
}

Я долго пробивал себе голову, прежде чем нашел это решение, похоже, что я не единственный, у кого эта проблема. Надеюсь, это сработает для вас!