Laravel 5.5使用事件监听器登录用户

时间:2017-09-27 23:50:29

标签: php single-sign-on saml-2.0 laravel-5.5

所以,我正在尝试使用SSO登录Laravel 5.5上的用户。我正在使用一个库,它工作正常,数据正确回来。但是当在Listener上尝试Auth :: login或任何Session数据时,它不会被保存。 Sessions在应用程序的任何其他位置都可以正常工作,但在Listener Events中则不行。

<?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 :: login($ laravelUser,true),用户已正确登录,我确实已检查。但是一旦页面刷新发送到最终URL,会话就会消失。

任何想法?

1 个答案:

答案 0 :(得分:0)

我在Laravel 5.5中遇到了确切的问题。您似乎缺少 saml2_settings.php 文件中的 routesMiddleware 设置。说明你需要一个包含 StartSession 的小组,所以你可能想把&#39; web&#39; 放在那里,默认包含它,如图所示在Kernel.php中