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

Facebook redirect url issue OAuthException

Мое приложение долго работало, но теперь я получаю сообщение от Facebook:

Content: {"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}

https://www.facebook.com/dialog/oauth/?client_id=163840537126360&redirect_uri=http://mycloud.niranjan.com/facebook/callback//empty/?vTitle=Facebook&scope=email,sms,user_about_me,friends_about_me,user_activities,friends_activities,user_birthday,friends_birthday,user_education_history,friends_education_history,user_events,friends_events,user_likes,friends_likes,user_location,friends_location,user_photos,friends_photos,user_videos,friends_videos,user_relationships,friends_relationships,user_status,friends_status,user_checkins,friends_checkins,read_stream,publish_stream

Может ли кто-нибудь предложить решение для этого?

4b9b3361

Ответ 1

Я понимаю, что это на 6 недель позже, но я подумал, что я опубликую это здесь, так как я нашел исправление, которое сработало для нас. Имел ту же проблему и после попытки кодирования возвращаемого URL-адреса (который не работал) я понял, что мы создаем наш URL-адрес, например:

$url = "http://example.com/";
$redirect_script = "/cgi-bin/redirect.cgi";

$redirect_url = $url . $redirect_script;

Однако это привело к обратному URL, который выглядел как http://example.com//cgi-bin/redirect.cgi - обратите внимание на "//" после example.com. Когда я удалил двойные косые черты с этого URL-адреса, он снова работал. OP, я вижу, что ваш URL-адрес переадресации имеет то же самое в /facebook/callback//empty?etc, который, я считаю, это то, что он испортил.

Ответ 2

В моем случае я использовал http://127.0.0.1:8000 - однако FB автоматически меняет на http://127.0.0.1:8000/ в OAuth redirect, чтобы разрешить передачу параметров запроса. Изменение моего URL-адреса в моем коде, чтобы иметь косую черту, решило проблему для меня. Я подозреваю, что они хранят окончательную версию и сравнивают ее со вторым запросом.

Ответ 3

Ниранджан, мы видели то же сообщение об ошибке, точно. Как и вы, это начало происходить в этом месяце без каких-либо изменений в нашем коде.

Мы тщательно проверили, что redirect_uri действительно была одинаковой в обоих вызовах - сначала вызов авторизации, а второй вызов access_token.

Мы подали в Facebook, но они разделили его как "Низкий": https://developers.facebook.com/bugs/307245456075215?browse=search_51964e3320a5b5556208759

В нашем случае мы делали что-то необычное (так что это не относится к вашему делу). Наш redirect_uri был URL-адресом с другим URL-адресом, внедренным в качестве закодированного элемента пути. URL-адрес внутри URL, дважды закодированный при передаче FB, начал создавать проблемы с серверами API Facebook.

Мы разрешили это, изменив кодировку вложенного URL на длинный шестнадцатеричный номер, а не на% -ную кодировку, поэтому все серверы Facebook видят простое redirect_uri, содержащее некоторый шестнадцатеричный путь, не подверженный нормальному кодированию/декодированию URL.

Мое подозрение в том, что Facebook изменил способ кодирования/декодирования своих параметров URL, возможно, декодирования дважды.

Если вы делаете что-то вроде нас, попробуйте этот подход. Если нет, попробуйте совсем другой и более простой redirect_uri, чтобы убедиться, что вы можете заставить что-то работать. И убедитесь, что вы правильно кодируете/декодируете все параметры URL-запроса.

Ответ 4

Сегодня у нас была та же проблема, проблема заключалась в том, что redirect_uri использовала http://URL-схему, а Facebook только принимает https://

Ответ 5

Важно отметить, что если вы используете https://, однако в своем URL-адресе входа вы используете http://, тогда он будет бросать OAuthException о проблеме с URL-адресом.

Поэтому вы должны использовать https:// в своем URL-адресе входа, если вы его используете.

Это решило мою проблему.

Ответ 6

Я столкнулся с каким-то странным поведением в Facebook.

Мой сайт запускает https, и я всегда получаю сообщение об ошибке "Ошибка проверки кода подтверждения. Убедитесь, что ваш redirect_uri идентичен".

Но затем я изменяю https на http в redirect_uri и на панели разработчика (OAuth urls), затем ошибка исчезает, и аутентификация начинает работать правильно. Но сайт все еще работает https...

Надеюсь, это поможет кому-то.

Ответ 7

в моем случае это вызвано специальными символами в моей строке запроса, у меня был код base64, который содержит / и =, я пробовал некоторые символы, такие как ! @ = / ; все бросают ту же ошибку

допустим только два символа, которые выглядят как: - _ # $

P.S / в конце запроса не помогло. также было запрещено в середине строки запроса

Ответ 8

Mo Hrad A прав, мне даже не удалось использовать символ $.

Я написал две простые функции, которые позволяют мне использовать сложные возвращаемые URL-адреса с параметрами:

public static string EncodeFacebookReturnUrl(string url)
{
    return Regex.Replace(HttpUtility.UrlEncode(url), "%", "_-_");
}

public static string DecodeFacebookReturnUrl(string url)
{
    return HttpUtility.UrlDecode(Regex.Replace(url, "_-_", "%"));
}

Перевод с помощью UrlEncode приводит только к 1 "незаконному" символу (%), который я заменяю юридической строкой _-_. Это упрощает декодирование.