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
Может ли кто-нибудь предложить решение для этого?
Ответы
Ответ 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 "незаконному" символу (%), который я заменяю юридической строкой _-_
.
Это упрощает декодирование.