Я пытаюсь написать плагин для моего сайта для подключения к 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 в адресной строке браузера выглядит примерно так:
После поиска в 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
(находится в том же каталоге, что и config.php
а также live.php
).
Это заставляет Hybrid Auth использовать ваш собственный обработчик сеанса.
Для тех, у кого такая же проблема, есть вопрос: файл, который вызывает API, находится в том же каталоге?
Меня работало только когда я положить мой файл в ту же папку, что и файл config.php. Попробуйте там и скажите мне, если это работает!