从Laravel 5.3开始,添加了这个中间件......
\照亮\会话\中间件\ AuthenticateSession
虽然它绝对是出于安全目的的好处,但如果他们更改密码,它还负责将用户登录(向用户显示登录页面)。
在Laravel 5.5中,我们如何防止用户在更改密码时被注销(被迫重新登录)?
答案 0 :(得分:3)
更改密码后,只需“重新登录”用户,而不是更改中间件:
<?php
//$user->passwordChangeMagicHere()
Auth::login($user);
//And the user is logged in again!
答案 1 :(得分:2)
对我有用的是,注销,清除会话,然后重新登录
Auth::guard('web')->logout();
Session::flush();
Auth::guard('web')->login($this);
答案 2 :(得分:0)
只是一个旁注,有时您可能必须更新会话的password_hash。完成更新密码过程的最佳方法。
auth()->login($user, true);
$request->session()->put([
'password_hash' => $newUser->getAuthPassword(),
]);
重要的是您在再次登录用户后执行此操作,否则,进一步调用
auth()->user();
将返回null。
答案 3 :(得分:0)
对于 Laravel > 8.x
当 session 的 password_hash 与当前的 auth()->user()
不同时,laravel 会自动注销用户。这是在这个中间件上完成的:
vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php
如果您使用新的哈希密码更新会话中的 password_hash,用户将不会注销。
session()->put([
'password_hash_' . auth()->getDefaultDriver() => $user->getAuthPassword()
]);
示例:
session()->put([
'password_hash_web' => "$2y$10$...hashpasswordstoredondatabase"
]);