PHP HybridAuth социальный вход не работает вообще. Перенаправление на? Hauth.start=Facebook&hauth.time
Я пытался заставить HybridAuth Social Login работать на этом простом php-сайте. Скачал HybridAuth и установил его. Затем обнаружил, что даже примеры не работают для социального входа в систему (пробовал на удаленном сервере тоже.
Обычный пример signin_signup работает нормально. Но всякий раз, когда я нажимаю ссылку для входа в социальную сеть (например, Facebook, Twitter), он перенаправляет меня на (MY_BASE_URL/index.php? Hauth.start=Facebook&hauth.time), не показывая никаких окон входа в систему / сообщений об ошибках вообще.
Я внимательно прочитал документацию и другие решения, размещенные здесь. Скорректировал мой config.php, чтобы иметь базовый URL-адрес, такой как http://example.com/index.php. Но это просто не отвечает. Я что-то упускаю? Я потратил 2 дня уже на это.
вот мой config.php
return
array(
"base_url" => "http://example.com/index.php",
"providers" => array (
// openid providers
"OpenID" => array (
"enabled" => false
),
"AOL" => array (
"enabled" => false
),
"Yahoo" => array (
"enabled" => false,
"keys" => array ( "id" => "", "secret" => "" )
),
"Google" => array (
"enabled" => true,
"keys" => array ( "id" => "", "secret" => "" )
),
"Facebook" => array (
"enabled" => true,
"keys" => array ( "id" => "xxxxxxxxx", "secret" => "xxxxxxx" )
),
"Twitter" => array (
"enabled" => true,
"keys" => array ( "key" => "xxxxxxxx", "secret" => "xxxxxxxx" )
),
// windows live
"Live" => array (
"enabled" => false,
"keys" => array ( "id" => "", "secret" => "" )
),
"MySpace" => array (
"enabled" => false,
"keys" => array ( "key" => "", "secret" => "" )
),
"LinkedIn" => array (
"enabled" => true,
"keys" => array ( "key" => "xxxxxxxx", "secret" => "xxxxxxx" )
),
"Foursquare" => array (
"enabled" => false,
"keys" => array ( "id" => "", "secret" => "" )
),
),
// if you want to enable logging, set 'debug_mode' to true then provide a writable file by the web server on "debug_file"
"debug_mode" => false,
"debug_file" => ""
);
Может кто-нибудь, пожалуйста, помогите мне? У меня сложилось впечатление, что он не очень хорошо работает после долгого поиска в Интернете. Если это так, может кто-то указать на лучшую альтернативную открытую / бесплатную социальную библиотеку входа?
4 ответа
В дополнение к собственному ответу tintinboss я обнаружил, что мне нужно проверить hauth_done
а также (это было для примера тестирования Facebook):
if (isset($_REQUEST['hauth_start']) || isset($_REQUEST['hauth_done']))
{
Hybrid_Endpoint::process();
}
Это наконец заставило это работать - спасибо tintinboss за полезный ответ!
Хорошо, я решил это сам.
Как говорилось ранее, документация была действительно не очень хорошей. Вот решение для тех, кто хочет интегрировать этот код в будущем
Во-первых, вы должны сделать так, чтобы ваш baseurl был в config.php
"base_url" => "http://yoursite.com/subdomain/index.php", OR
"base_url" => "http://yoursite.com/index.php",
Обратите внимание, что я не использую www. Не знаю почему, но это не работает с www.
Теперь сложная часть, вы должны включить это в свой файл index.php
require_once( "PATH_TO_HYBRID/Auth.php" );
require_once( "PATH_TO_HYBRID/Endpoint.php" );
if (isset($_REQUEST['hauth_start']))
{
Hybrid_Endpoint::process();
}
Процесс конечной точки - это то, что заставляет вас перенаправлять на пустую страницу, если она не указана. И вы должны добавить его в index.php, насколько я тестировал.
Теперь код должен нормально работать:) Я буду рад, если он кому-нибудь поможет.
Ответы @tintinboss и @dJomp разобрали меня. однако мне все еще нужно было получить информацию от зарегистрированного пользователя, что заняло у меня много времени. Здесь я поделюсь финальной версией, которая унесет вас далеко от этого ужасного цикла.
$config = require 'config.php';
require_once( "Hybrid/Auth.php" );
require_once( "Hybrid/Endpoint.php" );
if (isset($_REQUEST['hauth_start']) || isset($_REQUEST['hauth_done'])) {
Hybrid_Endpoint::process();
} else {
try {
$hybridauth = new Hybrid_Auth( $config );
$google = $hybridauth->authenticate( "Google");
$user_profile = $google->getUserProfile();
echo "Hi there! " . $user_profile->email;
} catch( Exception $e ){
echo "Ooophs, we got an error: " . $e->getMessage();
}
}
Привет, я перепробовал все предложения по решению этой проблемы, но никто не достиг решения. Я решил проблему следующим образом.
"base_url" => 'http: //'.$_SERVER [' SERVER_NAME '].'inauth / auth',
Ключевым моментом здесь является имя сервера. Кроме того, файлы cookie записывают ваши сеансы, и вы не можете просматривать сделанные изменения. Очистите куки и попробуйте снова.
Мы используем nginx, и мы исправили это, добавив ?$ Args в наш блок местоположения. Без этого запрос не пройдет hauth_done.
location / {
try_files $uri $uri/ /index.php?$args;
}