2013-06-12 3 views
0

Я использую Laravel 4 для реализации Hybrid Auth (Сообщество Steam). Я сделал два метода в своем контроллере, логин и выход из системы.Hybrid Auth: Выход из системы

Войти работает, и отображает информацию из Steam:

public function login() 
{ 

    $config = array( 
     "base_url" => "http://site.com/login/auth", 
     "providers" => array ( 
      "OpenID" => array (
        "enabled" => true 
      ), 
      "Steam" => array ( 
       "enabled" => true 
      ) 
     ) 
    ); 

    try { 
     $socialAuth = new Hybrid_Auth($config); 
     $provider = $socialAuth->authenticate("Steam"); 
     $userProfile = $provider->getUserProfile(); 
    } 
    catch(Exception $e) { 
     return "Error: " . $e; 
    } 

    echo "Connected with: <b>{$provider->id}</b><br />"; 
    echo "As: <b>{$userProfile->displayName}</b><br />"; 
    echo "<pre>" . print_r($userProfile, true) . "</pre><br />"; 
    echo "<img src=". $userProfile->photoURL . ">"; 

} 

Теперь выйти из системы, я бы назвал $provider->logout(); Однако я хочу, чтобы выйти из системы с использованием другого метода.

Однако, я могу показаться, чтобы не понять, как это будет работать ... Я пробовал такие вещи, как:

public function logout() 
{ 

    Hybrid_Auth()->authenticate('Steam')->logout(); 

} 

Существует документация по http://hybridauth.sourceforge.net/apidoc.html методов delaring, таких как Hybrid_Auth::logoutAllProviders() Но я могу (?) Кажется, что-то выяснили, как его использовать!

Любая помощь будет раздуваться!

Спасибо.

+0

Извините, что комментировал ваш вопрос, но поскольку у вас, похоже, есть работа, как вы справлялись с hybridauth в Laravel, не загружая Steam с правильного пути, как описано здесь? http://stackoverflow.com/questions/18592642/laravel-4-composer-and-hybridauth-how-to-load-additional-providers – robjbrain

+0

Эй, прокомментировал этот вопрос для вас. – Alias

ответ

2

Вы можете создать экземпляр Hybrid_Auth класса в вашей logout функции, а затем использовать logoutAllProviders метод:

(new Hybrid_Auth($config))->logoutAllProviders(); 

Однако, я полагаю, что вы передаете экземпляр HybriadAuth к конструктору:

# YOUR CONTROLLER 
public function __construct(Hybrid_Auth $hybridAuth) 
{ 
    $this->hybridAuth = $hybridAuth; 
} 

public function logout() 
{ 
    $this->HybridAuth->logoutAllProviders(); 
} 

# ELSEWHERE IN THE APP (ROUTES FILE, FOR INSTANCE) 
App::bind('Hybrid_Auth', function() { 
    return new Hybrid_Auth(array(
      "base_url" => "http://site.com/login/auth", 
      "providers" => array (
       "OpenID" => array (
         "enabled" => true 
       ), 
       "Steam" => array (
        "enabled" => true 
       ) 
      ) 
     )); 
}); 

С зависимостью инъекции, ваш контроллер также должен быть проверен.

+0

Спасибо, хотя как я могу инициировать аутентификацию Steam? $ provider = $ this-> HybridAuth-> authenticate ("Steam"); или что-то? (Не работает, но я думаю, что я близок ...) – Alias

+0

Ах, это «hybridAuth», а не «HybridAuth». Поэтому мне удалось войти в систему, однако при вызове моей функции выхода из системы я получаю сообщение об ошибке «Шаблон маршрута»/login/{action}/{{action}} «не может ссылаться на имя переменной« действие »более одного раза». Видел ли это раньше? – Alias

+0

В коде: http://paste.laravel.com/x9l – Alias