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浏览器出错。如何解决这个问题?

塞瓦·卡拉什尼科夫

您刚刚将新的中间件应用于所有网络路由,因此当用户被重定向到->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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章