Перенаправление в диалог аутентификации - "Произошла ошибка. Пожалуйста, попробуйте позже"
Почему это всегда случается со мной?
Это происходит после того, как мое приложение проверило логин пользователя и перенаправило пользователя на страницу аутентификации:
https://www.facebook.com/dialog/oauth?client_id=XXX&redirect_uri=http%3A%2F%2Fexample.com%2Fmyappname%2F&state=YYYYYY&scope=offline_access%2Cpublish_actions
Но вместо того, чтобы показывать страницу авторизации, Facebook показывает страницу ошибки с
Произошла ошибка. Пожалуйста, попробуйте позже.
Есть ли какая-либо конфигурация, которую я должен сделать перед попыткой аутентификации моих пользователей?
Все делается с помощью PHP с использованием классов PHP-SDK.
34 ответа
У меня была такая же проблема после изменения домена моего сайта. Хотя я правильно изменил параметр request_uri и обновил настройки своего приложения новым доменом, ошибка продолжала появляться. Затем я понял, что идентификатор и секретный идентификатор моего приложения Facebook автоматически изменились без предупреждения!! Все снова заработало, используя новый идентификатор.
У меня была такая же проблема, как и у вас.
На странице приложений для разработчиков Facebook убедитесь, что режим песочницы отключен.
Это происходило и со мной, но все ключи API, секреты и прочее были верны. Я обнаружил, что мое приложение работает в режиме песочницы. Перейдите в настройки своего приложения на https://developers.facebook.com/, перейдите на вкладку дополнительных настроек и проверьте, находится ли ваше приложение в режиме песочницы. Если он отключен, попробуйте еще раз. Дайте нам знать, если это работает.
Я получил эту ошибку, потому что я начинал с http://mysite.com
, но указал http://WWW.mysite.com
в моих настройках Facebook - имел значение www... В итоге я решил использовать.httpaccess, чтобы всегда убивать "www", и указывать FB на http://mysite.com
наихудший. поддомен. Когда-либо.: И)
При работе с диалогами Facebook предоставляет атрибут show_error, который по умолчанию имеет значение no
но можно установить на true
в среде разработки и действительно полезен для целей отладки.
show_error - Если для этого параметра установлено значение true, код ошибки и описание ошибки будут отображаться в случае ошибки.
Инструкции по его использованию можно найти в Документах Facebook.
Я отлаживал "Произошла ошибка. Пожалуйста, попробуйте позже." диалог, прежде чем я нашел этот атрибут в документах. Как только я начал использовать его, я мог видеть следующее сообщение:
Код ошибки API: 191
Описание ошибки API: указанный URL-адрес не принадлежит приложению
Сообщение об ошибке: redirect_uri не принадлежит приложению.
Для меня это произошло потому, что созданный мной "тестовый пользователь" был частью отдельного приложения. Я создал тестового пользователя для ЭТОГО приложения, и он начал работать нормально.
Я знаю, что это глупо, но это может спасти кого-то еще от неприятностей.
У меня такая же проблема; оказалось, что FB требует строку appID, а не int...
//DOESNT WORK:
$facebook = new Facebook(array(
'appId' => 147XXXXXXXXXXX,
'secret' => 'XXXXXXXXXXXXXX',
));
// WORKS:
$facebook = new Facebook(array(
'appId' => '147XXXXXXXXXXX',
'secret' => 'XXXXXXXXXXXXXX',
));
Согласно документации OAUTH Dialog:
*redirect_uri: URL-адрес для перенаправления после нажатия пользователем кнопки в диалоговом окне. Указанный вами URL-адрес должен быть URL-адресом с тем же базовым доменом, который указан в настройках вашего приложения, и URL-адресом Canvas в виде https://apps.facebook.com/YOUR_APP_NAMESPACE... *
Я создаю oauth-ссылки динамически, чтобы запросить у пользователя дополнительные разрешения, если это необходимо, и я понял, что даже если вы перенаправляете на https://apps.facebook.com/YOUR_APP_NAMESPACE вам необходимо настроить параметры домена приложения и веб-сайта в своем администрирование приложений. Я установил домен на facebook.com, а веб-сайт на корневой URL facebooks.
Теперь моя ссылка на диалог oauth работает нормально - даже в режиме песочницы.
Для меня решение состоит в том, чтобы включить опцию "Аутентифицированные рефералы". Это действительно исправлено после этого.
У меня была именно эта проблема в приложении Page Tab, и я не мог понять, в чем проблема. Это сработало на моей тестовой странице, но как только я запустил его, оно не сработало. В конце концов я обнаружил, что исправил проблему, поместив фактический URL на вкладку страницы (т.е. http://www.facebook.com/<"page_name">/app_<"app_id">
) в "URL сайта" в разделе "Веб-сайт". Это не имеет никакого смысла. Но это сработало:-)
Убедитесь, что ваше приложение настроено на использование соответствующего URL и домена вашего сайта. Это может быть этим.
Если весь ваш код работает правильно, то для устранения ошибки такого типа перейдите в Приложения разработчиков Facebook и отключите режим песочницы.
Для меня проблема заключалась в том, что пользователи Facebook, которые я использовал для тестирования приложения, не подтвердили свой адрес электронной почты в Facebook.
Мой клиент создал 2 фальшивых аккаунта на Facebook и сказал мне, что они не работают. Но он забыл подтвердить адреса электронной почты этих учетных записей (письма, отправленные Facebook, отправлялись в его папку со спамом, и он не заметил).
Мне понадобилось несколько часов, чтобы найти это, поэтому я надеюсь, что это кому-нибудь поможет.
Ура!
Другая возможная ошибка: если вы напрямую скопировали код из примера Facebook SDK, вы можете получить такую же ошибку, несмотря на то, что все правильно. http://developers.facebook.com/docs/reference/php/
Это потому, что в их примере они использовали обратные кавычки вместо одинарных кавычек для ключа массива. Правильный код выглядит следующим образом.
require_once("facebook.php");
$config = array();
$config['appId'] = 'YOUR_APP_ID';
$config['secret'] = 'YOUR_APP_SECRET';
$config['fileUpload'] = false; // optional
$facebook = new Facebook($config);
Проблема была решена после того, как я обновил "appID" и "secret", а затем перенес изменение обратно на heroku (то есть - "git push heroku master")
Ключ не забыть подтолкнуть изменения обратно к герою мастера. Очень легко пропустить, если вы привыкли к тестированию на localhost.
Надеюсь это поможет.
Также была проблема с неправильной ссылкой перенаправления: у меня была ссылка, начинающаяся с "https://apps.facebook.com?myapplication".... но после авторизации перенаправление привело бы меня к "apps.facebook.com/Myapplication" и, следовательно, я получаю сообщение, описанное выше:"Произошла ошибка. Попробуйте позже". поскольку "apps.facebook.com"... означает "http://apps.facebook.com/Myapp", а не "HTTPS://apps.facebook.com/,..."
Решение: зашел в настройки моего приложения в разделе разработчиков Facebook. Нажал "Редактировать". В левом меню выбрано "Разрешения" (по умолчанию меню установлено на "Основные"), а во вновь открытом наборе настроек изменил мой "Параметр токена аутентификации" с "Строка запроса" на "Фрагмент URL".
Это сработало! После завершения авторизации пользователи попадают на "https://apps.facebook.com/myapp..."
Я только что столкнулся с этой проблемой сам. Я разрабатываю приложение для себя, поэтому мой хост - localhost. Не было очевидно, как настроить localhost в конфигурации приложения. Если вы хотите разрабатывать локально, настройте свое приложение, выполнив следующие действия:
- Перейдите к месту, где вы управляете своим приложением Facebook. В частности, вы хотите быть в "Basic" в меню "Настройки".
- Добавьте "localhost" в "Домен приложения".
- В разделе "Выберите способ интеграции вашего приложения с Facebook" выберите "Веб-сайт" и введите "http://localhost/".
Сохраните и подождите пару минут, чтобы информация распространялась, хотя она сразу сработала для меня.
Ответ за 2015 год
Режим песочницы исчез.
Продолжать My Apps -> Your App -> Status & Review
и измените ползунок на да для:
Вы хотите сделать это приложение и все его живые функции доступными для широкой публики?
Пришел сюда с похожей проблемой и, да, моя Песочница была включена. Я отключил его и, вуаля, проблема со входом исчезла. Я должен предупредить, что эта проблема не затрагивает разработчиков и администраторов веб-сайтов, поскольку Facebook позволяет этим пользователям видеть приложение. По этой причине я даже не мог поверить, что пользователи жаловались на невозможность войти, так как я мог войти без проблем вообще.
Я наложил ограничение на приложение, которое может использовать только резиденция Соединенных Штатов. Я работал из Канады, когда появилось это сообщение об ошибке. После снятия ограничения все заработало.
У меня была та же проблема, и я исправил ее, добавив param &display=touch к URL
попробуй, может поможет
Я знаю, что вы, возможно, получили ответ, но это для тех, кто все еще пытается найти решение.
Вы можете попробовать все вышеперечисленные решения, но просто помните, что удалите предыдущее приложение с устройства или симулятора, прежде чем проверять другое решение.
Я испробовал все решения, но не получил ответа, так как не удалял предыдущее приложение, только очистка сборки не удовлетворяет условию. Надеюсь, это кому-нибудь поможет.:)
Я столкнулся с той же проблемой, и причина была в том, что мой app was not live
и общедоступный.
Я добавил свой идентификатор электронной почты в контактную электронную почту под вкладками настроек и включил мое приложение (которое ранее было отключено, чтобы запустить).
После запуска приложения отображается диалоговое окно с соответствующим изображением, заголовком и описанием с именем приложения внизу.
Причина в моем случае была совершенно другой. Я пытался открыть диалоговое окно канала автоматически после загрузки страницы. И 9 раз из 10 это отображало эту ошибку. Сначала я добавил show_error: true
параметр, предложенный @Peter Roome, но это не помогло, отображая 104: Invalid signature
не описательный вообще.
Тогда я выяснил причину. Код был в $(document).ready
Функция jQuery. И кажется, что некоторые вещи в Facebook еще не были загружены в тот момент, когда код должен был быть выполнен. Я переместил код в $(window).load
блок (который выполняется после загрузки всего содержимого страницы), и проблема была решена.
У меня была эта ошибка, потому что я использовал redirect_url
в качестве параметра вместо redirect_uri
,
На странице документа Аутентификация на стороне сервера сказано использовать redirect_url
:
https://www.facebook.com/dialog/oauth?
client_id=YOUR_APP_ID
&redirect_url=YOUR_REDIRECT_URI
&scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES
&state=SOME_ARBITRARY_BUT_UNIQUE_STRING
Но это неверно. Документ OAuth Dialog говорит использовать redirect_uri
вместо этого, который работает, поэтому я предполагаю, что вы можете использовать только одно, а не другое:
https://www.facebook.com/dialog/oauth/?
client_id=YOUR_APP_ID
&redirect_uri=YOUR_REDIRECT_URL
&state=YOUR_STATE_VALUE
&scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES
У меня была та же проблема, и причина была другой:
Я вошел как тестовый пользователь другого приложения. Поэтому я не смог авторизовать приложение, для которого не был создан тестовый пользователь.
Когда я вышел из системы и вошел в систему как обычный пользователь или тестовый пользователь для приложения, которое я пытался авторизовать, все было в порядке.
Проверьте ваш appid и убедитесь, что вы обновили URL своего сайта. Мобильный сайт по адресу https://developers.facebook.com/
В моем случае была проблема с возрастом учетной записи, используемой с приложением.
Если приложение FB содержит алкогольный контент, то пользователи FB младше 21 года при попытке авторизации выдают ошибку.
Я перепробовал все ответы, упомянутые здесь. Но это не сработало. Мне пришлось удалить и создать снова. Я предполагаю, что это было связано с новым "Аутентифицированным рефералом". Если вы добавили объекты Open Graph, которые не были утверждены, это может привести к ошибке.