当用户第一次登录时,通过电子邮件和密码手动提供给用户。他们需要被迫输入新密码(密码和确认密码 - 只有两个字段)。
我创建了一个中间件:
class FirstTimeLogin
{
public function handle($request, Closure $next)
{
if ($request->user()->first_time_login) {
return redirect()->route('setup-password');
}
return $next($request);
}
}
在Kernel.php
我已经添加\App\Http\Middleware\FirstTimeLogin::class
到$middlewareGroups
数组中:例如:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\FirstTimeLogin::class
]
];
web.php 路由看起来像这样:
Route::group(['middleware' => ['auth']], function () {
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/password/setup-password', 'Auth\SetupPasswordController@resetPasswordFirstTime')->name('setup-password');
Route::post('/password/setup-password', 'Auth\SetupPasswordController@updatePassword');
});
问题是它在浏览器上多次重定向,导致ERR_TOO_MANY_REDIRECTS
浏览器出错。如何解决这个问题?
您刚刚将新的中间件应用于所有网络路由,因此当用户被重定向到->route('setup-password')
中间件时会再次启动,因此您可以进行无限重定向
解决此问题的一种方法是为用于密码设置的那 2 条路由创建排除项
确保为第二条路线命名,例如 setup-password-post
然后更改代码的中间件:
if ($request->user()->first_time_login) {
if (!in_array(Route::currentRouteName(), ['setup-password', 'setup-password-post'])) {
return redirect()->route('setup-password');
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句