Я пытаюсь написать плагин для моего веб-сайта для подключения к Facebook с помощью классов HybridAuth.
Я просто попробовал следующий код
function authenticatewith( $provider ) { ini_set('display_errors','on'); //includes $config = dirname(__FILE__) . '/hybridauth-2.1.2/hybridauth/config.php'; require_once("hybridauth-2.1.2/hybridauth/Hybrid/Auth.php"); $provider_name = $provider; //$config = $this->getconfig($id); try { // initialize Hybrid_Auth with a given file $hybridauth = new Hybrid_Auth($config); // try to authenticate with the selected provider $adapter = $hybridauth->authenticate($provider_name); // then grab the user profile $user_profile = $adapter->getUserProfile(); } catch( Exception $e ) { echo "Error: please try again!"; echo "Original error message: " . $e->getMessage(); } echo "User Details: "; var_dump($user_profile); }
Когда я вызываю эту функцию, формирую класс плагина. В браузере отображается следующая ошибка:
Вы не можете получить доступ к этой странице напрямую.
… и URL-адрес в адресной строке браузера выглядит примерно так:
http://zyx.com/oinmonm/plugins/sociallogin/hybridauth-2.1.2/hybridauth/?hauth.start=Facebook&hauth.time=1415168326
После поиска stackoverflow я нашел аналогичный вопрос, который описывает подобную проблему, но мне не удалось выяснить, как применять предложения к моему коду, исправить проблему:
Вы не можете получить доступ к этой странице напрямую – HybridAuth Social Login
Скорее всего, проблема связана с разными именами доменов, так как мой сайт работает на двух разных доменах.
Как я могу исправить свой код, чтобы предотвратить эту проблему?
Подробнее
У меня есть ссылка на facebook на www.bca.com (пример), затем, когда вы нажимаете на нее, она переходит к файлу controller.php, который будет обращаться к плагину, который я пишу. Обычно, если я сохраняю папку на веб-сайте, такую как папка плагина, которая недоступна на сайте www.bca.com, вместо этого она доступна другим доменным именем.
Я пытаюсь сказать, что сеанс начинается с bca.com, но классы Hybridauth сохраняются в другом домене. И я думаю, что это причина, по которой приходит ошибка.
Я попытался отладить и выяснил, что ошибка появляется из следующих строк в файле Endpoint.php
// Check if Hybrid_Auth session already exist if (! $storage->config("CONFIG")) { header("HTTP/1.0 404 Not Found"); die("You cannot access this page directly."); }
Я пытался исправить это за последние 3 дня. Но я застрял в этой точке плз, кто-то мне помогает. заранее спасибо
Попробуйте добавить @session_start();
в верхней части ваших файлов.
Я была такая же проблема. Это относится к нашему пользовательскому обработчику сеанса, который устанавливается session_set_save_handler()
. Hybrid Auth использует стандартные сеансы PHP, поэтому после перенаправления и открытия нового сеанса Hybrid Auth начинает использовать стандартные сеансы PHP-файлов вместо пользовательского обработчика сеанса. Это приведет к потере данных конфигурации из нашего сеанса и получению этого сообщения об ошибке.
Я решил эту проблему, добавив собственный обработчик сеанса в верхней части hybridauth/index.php
(расположенный в том же live.php
и config.php
и live.php
). Это заставляет Hybrid Auth использовать ваш пользовательский обработчик сеанса.
Для тех, у кого есть такая же проблема, возникает вопрос: файл, который вызывает API, находится в том же каталоге?
Я работал только тогда, когда я помещал свой файл в ту же папку, что и файл config.php . Попробуйте там и скажите, если это сработает!