Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.5使用事件侦听器登录用户_Php_Single Sign On_Saml 2.0_Laravel 5.5 - Fatal编程技术网

Php Laravel 5.5使用事件侦听器登录用户

Php Laravel 5.5使用事件侦听器登录用户,php,single-sign-on,saml-2.0,laravel-5.5,Php,Single Sign On,Saml 2.0,Laravel 5.5,因此,我正在尝试使用SSO登录Laravel5.5上的用户。我正在使用一个库,它工作正常,数据返回正确。然而,当我在Listener上尝试验证::login或任何会话数据时,它都不会被保存。会话在应用程序的任何其他点都可以正常工作,但在侦听器事件中则不行 <?php namespace App\Listeners; use App\User; use Illuminate\Support\Facades\Auth; use \Aacotroneo\Saml2\Events\Saml2

因此,我正在尝试使用SSO登录Laravel5.5上的用户。我正在使用一个库,它工作正常,数据返回正确。然而,当我在Listener上尝试验证::login或任何会话数据时,它都不会被保存。会话在应用程序的任何其他点都可以正常工作,但在侦听器事件中则不行

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

    }
}

我在Laravel 5.5中遇到了确切的问题。您似乎缺少saml2_settings.php文件中的routesMiddleware设置。描述中说,您需要一个包含StartSession的组,因此您可能希望将“web”放在那里,默认情况下包含它,如Kernel.php中所示,我不是100%确定,但我怀疑问题在于您实际上没有返回带有会话cookie的响应。因此,如果您在用户登录后立即进行检查(在下一行),您会发现该用户已对此请求进行了身份验证,但在后续请求中,它们不会与其上一个会话重新关联。仅供参考,您可以使用
find
方法通过
id
查找用户。例如,
$laravelUser=User::find($id)@fubar我知道。我并没有真正使用Id字段。我只是简化了代码。我认为问题在于路由的中间件(它们是由供应商完成的)。我明天再查。