我已经安装了这个github Laravel 5 Saml2包: https://github.com/aacotroneo/laravel-saml2
我的登录工作正常,身份验证正在进行,数据正在正确传回。我有一个LoginListener成功捕获正确的用户信息并从数据库返回一个有效的用户。但是,当我尝试使用Auth :: login时,它不会在侦听器句柄函数之外持久存在,并且会在SAML身份验证和侦听器之间进入无限循环。
这是我的听众:
namespace App\Listeners;
use \Aacotroneo\Saml2\Events\Saml2LoginEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Auth;
use Illuminate\Session\Middleware\StartSession;
use App\Http\Controllers\HomeController;
class LoginListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
}
/**
* Handle the event.
*
* @param Saml2LoginEvent $event
* @return void
*/
public function handle(Saml2LoginEvent $event)
{
$user = $event->getSaml2User();
$userData = [
'id' => $user->getUserId(),
'attributes' => $user->getAttributes(),
'assertion' => $user->getRawSamlAssertion()
];
//check if email already exists and fetch user
$user = \App\Models\User::where('username', $userData['attributes']['NameID'][0])->first();
Auth::guard('web')->login($user);
Session::save();
}
}
我添加了' web'在我的路由saml2-settings文件中的中间件设置,如多个地方所示,没有任何效果。有人在某个地方有一个可行的例子,我可以深入了解我的错误吗?
答案 0 :(得分:1)
对此的解决方案原来是在中间件中。我有几个自定义中间件文件设置,他们干扰Web中间件开始解决问题。
为了解决这个问题,我在内核中创建了一个名为listener的自定义中间件组,并删除了我添加到web中的所有额外中间件:
'listener' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
],
然后在saml2_settings配置文件中,我将routesMiddleware变量更改为listener:
'routesMiddleware' => ['listener'],
希望这有助于其他人进行故障排除。