"Вы не можете получить доступ к этой странице напрямую" - 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 решило это. - Надеюсь это поможет:)

Другие вопросы по тегам