Laravel-首次使用

时间:2018-08-15 21:50:22

标签: php laravel laravel-5

当用户首次通过手动提供给用户的电子邮件和密码登录时。需要强制他们输入新密码(密码和确认密码-仅两个字段)。

我创建了一个中间件:

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错误。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您刚刚将新的中间件应用于所有网络路由,因此当用户重定向到->route('setup-password')时,中间件会再次出现,因此您可以进行无限重定向

解决此问题的一种方法是为这两个用于设置密码的路由创建排除项

确保为第二条路线命名,例如setup-password-post

然后更改中间件的代码:

if ($request->user()->first_time_login) {
    if (!in_array(Route::currentRouteName(), ['setup-password', 'setup-password-post'])) {
        return redirect()->route('setup-password');
    }
}

答案 1 :(得分:0)

您需要检查一下以确保当前路径不是setup-password

尝试将if语句更改为类似以下内容:

if ($request->user()->first_time_login && !$request->is('setup-password')) {