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;
}
Другие вопросы по тегам