"Вы не можете получить доступ к этой странице напрямую" - Hybrid Auth
Я размещаю свое приложение PHP Yii на AWS Elastic Beanstalk и, следовательно, использую базу данных для хранения сеансов. Я успешно реализовал вход в Facebook с помощью Hybridauth в среде общего хостинга. Когда я размещаю на Facebook Elastic Beanstalk, логин выдает ошибку:
"You cannot access this page directly"
URL заканчивается как:
http://mydomain.com/hybridauth/default/callback?hauth.start=Facebook&hauth.time=1393106016
Отсюда я узнал, что это связано с тем, что Facebook перезванивает приложению, но находит другой сеанс. Endpoint.php затем выдает ошибку:
# Init Hybrid_Auth
try {
// Check if Hybrid_Auth session already exist
if ( ! isset( $_SESSION["HA::CONFIG"] ) ) {
header( "HTTP/1.0 404 Not Found" );
die( "You cannot access this page directly." );
}
Как я могу гарантировать, что Facebook перезвонит на тот же сеанс и успешно выполнит вход с использованием hybridauth?
9 ответов
Это из-за имени PHP SESSION Если у вас есть изменение имени сеанса в файле конфигурации Yii. Тогда вы должны использовать добавить это session_name('samar_v4');
в файле protected/modules/user/vendors/hybridauth/Hybrid/Endpoint.php
в начале грибов authInit
Проверьте URL перенаправления вашего приложения Facebook. Facebook не разрешает множественные URL перенаправления. Таким образом, каждый раз, когда вы меняете свой хостинг / домен / адрес, вам придется переконфигурировать URL-адрес перенаправления приложения Facebook или использовать другой набор учетных данных.
Также ваш URL для перенаправления должен выглядеть примерно так: http://mydomain.com/hybridauth/?hauth.done=Facebook
Это сработало и для меня:
"base_url" => " https://example.com/inc/hybridauth/",
Я изменил это на
"base_url" => "https://".$_SERVER['HTTP_HOST']."/inc/hybridauth/",
У меня была такая же проблема при использовании Hybrid Auth 2.8. Это относится к нашему пользовательскому обработчику сеансов, который устанавливается session_set_save_handler()
, Hybrid Auth использует стандартные сеансы PHP, поэтому после перенаправления и открытия нового сеанса Hybrid Auth начинает использовать стандартные сеансы PHP-файлов вместо вашего собственного обработчика сеансов. Это приводит к потере данных конфигурации из нашего сеанса и получению этого сообщения об ошибке.
Я решил эту проблему, добавив наш собственный обработчик сеанса вверху hybridauth/index.php
(находится в том же каталоге, что и config.php
а также live.php
). Это заставляет Hybrid Auth использовать ваш собственный обработчик сеанса.
Для всех, кто борется с этой проблемой, и она не связана с проблемой регистрации www-домена, моя проблема была связана с невозможностью записи в каталог сессии php. Не уверен, как или когда это было изменено, но если вы не можете написать в /var/lib/php/5.5/session, hybridauth не будет работать.
Что касается других ответов, я считаю, что это проблема сеанса, возможно, сеанс запущен в неправильном домене, а затем не может быть повторно получен в другом домене.
Я решил эту проблему, удалив различные параметры ServerAlias из моего конфига разработки Apache.
это "вызвало" ошибку:
ServerName mydomain.com.au.localhost
ServerAlias www.mydomain.com.au.localhost
ServerAlias localhost.mydomain.com.au # << using this one
это исправило ошибку:
#ServerName mydomain.com.au.localhost
#ServerAlias www.mydomain.com.au.localhost
ServerName localhost.mydomain.com.au # << using this one
apachectl restart
(Я обычно использую mydomain.com.au.localhost, поэтому оставляю их для дальнейшего использования.)
Для меня это работало на основном домене, но не на поддомене. Я решил, что это был base_url в config.php, который вызвал ошибку.
Вместо
"base_url" => "https://mydomain.com/inc/hybridauth/",
Я изменил это на
"base_url" => "https://".$_SERVER['HTTP_HOST']."/inc/hybridauth/",
Теперь это работает везде, где я это положил.
Я нашел эту проблему, которая кажется неразрешимой. Я сдался, вот когда мой инстинкт заставил меня сделать тест и вуаля все работает.
Для тех, у кого такая же проблема, есть вопрос: файл, который вызывает API, находится в том же каталоге?
Я работал только тогда, когда я положил свой файл в ту же папку, что и файл config.php. Попробуйте там и скажите мне, если это работает!
Обнимаю и Приветствую всех!
Я решил свою конкретную ошибку HybridAuth "Вы не можете получить доступ к этой странице напрямую", указав имя домена в файле cookie сеанса. Мое приложение существует на поддомене, и я разработал перенаправление, указывающее на socialize.sub.domain.tld, и файл cookie не достиг _Endpoint.
Изменение домена сеанса на.domain.tld решило это. - Надеюсь это поможет:)