2017-09-27 6 views
0

Donc, j'essaye de connecter un utilisateur sur Laravel 5.5 en utilisant SSO. J'utilise une librairie et ça marche bien, les données reviennent correctement. Cependant quand sur Listener j'essaye de Auth :: login ou n'importe quelles données de Session, il n'est pas sauvé. Les sessions fonctionnent correctement à partir de tout autre point de l'application, mais pas dans les écouteurs.Laravel 5.5 Connexion de l'utilisateur à l'aide de l'écouteur d'événement

<?php 

namespace App\Listeners; 

use App\User; 
use Illuminate\Support\Facades\Auth; 

use \Aacotroneo\Saml2\Events\Saml2LoginEvent; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 

class AuthListener 
{ 
    /** 
    * Create the event listener. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     // 
    } 

    /** 
    * Handle the event. 
    * 
    * @param object $event 
    * @return void 
    */ 
    public function handle(Saml2LoginEvent $event) 
    { 
     $messageId = $event->getSaml2Auth()->getLastMessageId(); 
     // your own code preventing reuse of a $messageId to stop replay attacks 
     $user = $event->getSaml2User(); 
     $attributes = $user->getAttributes(); 

     $id = $attributes['id']; 
     $laravelUser = User::where('id', $id)->first(); 

     \Session::push('name', 'test'); 
     Auth::login($laravelUser, true); 

    } 
} 

Maintenant, au Auth login ($ laravelUser, true) l'utilisateur est connecté correctement, j'ai vérifié. Mais dès que l'actualisation de la page envoie l'URL finale, la session est terminée.

Des idées?

+0

Je ne suis pas sûr à 100%, mais je soupçonne que le problème est que vous ne renvoyez pas une réponse avec un cookie de session. Par conséquent, si vous vérifiez immédiatement après la connexion de l'utilisateur (sur la ligne suivante), vous constaterez que l'utilisateur a été authentifié pour la requête _this_, mais lors des requêtes suivantes, il ne sera pas ré-associé à sa session précédente. – fubar

+0

Et FYI, vous pouvez utiliser la méthode 'find' pour rechercher les utilisateurs par' id'. Par exemple. '$ laravelUser = User :: find ($ id);' – fubar

+0

@fubar Je sais. Je n'utilise pas vraiment le champ Id là-bas. Je voulais juste simplifier le code. Je pense que le problème est sur le middleware pour les routes (ils sont effectués à partir d'un fournisseur). Je vais le vérifier demain. – Eduardo

Répondre

0

J'étais confronté au problème exact dans Laravel 5.5. Il semble que vous manquiez le fichier routesMiddleware dans le fichier saml2_settings.php. La description que vous dit besoin d'un groupe qui comprend StartSession, de sorte que vous pouvez mettre « web » là, qui a elle inclus par défaut, comme on le voit dans Kernel.php