2017-09-27 21 views
0

SSOを使用してLaravel 5.5にログインしようとしています。私はライブラリを使用しており、正常に動作し、データが正常に戻ってきます。しかし、Listener上でAuth :: loginやセッションデータを取得しようとすると保存されません。セッションは、アプリケーションの他のポイントからは正常に動作しますが、リスナーイベントでは正常に動作しません。今Laravel 5.5イベントリスナーを使用してログインしてください

<?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); 

    } 
} 

のAuth ::ログイン(真$ laravelUser、)で、ユーザーが正しくログインしている、私はチェックをしました。しかし、ページが最後のURLに送信されるとすぐに、セッションはなくなります。

すべてのアイデア?

+0

に見られるように、それは、デフォルトで含まれてい「ウェブ」がを配置すること私はあなたが実際にセッションクッキーで応答を返していないという問題があると考えています。したがって、(次の行に)ユーザをログインした直後にチェックすると、そのユーザは_this_リクエストに対して認証されていますが、それ以降のリクエストでは、前のセッションに再関連付けされていません。 – fubar

+0

そして参考までに、 'find'メソッドを使って' id'でユーザを検索することができます。例えば。 '$ laravelUser = User :: find($ id);' – fubar

+0

@fubar私は知っています。私は実際にそこにIDフィールドを使用していません。私はコードを単純化しました。私は問題がルートのためのミドルウェアにあると思っています(ベンダーからのものです)。私は明日それを確認します。 – Eduardo

答えて

0

私はLaravel 5.5の正確な問題に直面していました。 routesミドルウェアsaml2_settings.phpに設定されていないようです。 、説明はあなたがのstartSessionを含むグループが必要と言うので、私は100%わからないKernel.php