php - Laravel - 首次用户
问题描述
当用户第一次通过电子邮件和手动给用户的密码登录时。他们需要被强制输入新密码(密码和确认密码——只有两个字段)。
我创建了一个中间件:
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
出错。如何解决这个问题?
解决方案
您刚刚将新的中间件应用于所有 Web 路由,因此当用户被重定向到->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');
}
}
推荐阅读
- php - 将 XML 标记解析为数组,不依赖于 XML 结构
- python - H3 六边形不匹配
- javascript - Apollo 客户端:使用修改过的变量重新获取数据,useQuery 还是 useLazyQuery?
- c# - 如果创建不成功,Web API 控制器“创建”操作应该抛出什么类型的异常?
- python - 密码生成器有效密码检查
- gcc - GCC 使用软件浮点库移植到新目标
- android - 位置在 android 中不断更新,而不是一次
- r - R 将国家名称附加为向量中的数字
- python - Airflow - BigQuery 架构字段中的值无效
- java - Java正则表达式解析两级结构