Php Laravel 5.5使用事件侦听器登录用户
因此,我正在尝试使用SSO登录Laravel5.5上的用户。我正在使用一个库,它工作正常,数据返回正确。然而,当我在Listener上尝试验证::login或任何会话数据时,它都不会被保存。会话在应用程序的任何其他点都可以正常工作,但在侦听器事件中则不行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
<?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字段。我只是简化了代码。我认为问题在于路由的中间件(它们是由供应商完成的)。我明天再查。