更改密码中间件不能调用

时间:2016-12-09 06:53:03

标签: php laravel

Hello在我的项目中我使用来自管理端的自动生成的密码。当用户尝试登录时,我正在检查用户是否更改了密码,如果密码没有更改,我想在changepassword重定向用户屏幕。我为它设置了changepasword中间件,但中间件没有调用changepassword重定向链接。

changepasword中间件

use Closure;
use Auth;

class ChangePassword
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ( Auth::check() && Auth::user()->isAutoPasswordChanged() )
        {
            return redirect('/change_password');
        }
        else
        {
            return redirect('/tests');
        }
    }
}

web.php

Route::group(['middleware' => 'auth', 'changepassword'], function () {
       Route::resource('/tests', 'TestController'); 
       Route::resource('/clients', 'ClientController'); 
});

2 个答案:

答案 0 :(得分:1)

转到app \ Http \ Kernel.php

并将其添加到$routeMiddleware

'change_password' => \App\Http\Middleware\ChangePassword::class,

然后在您的路线中,用

替换中间件行
Route::group(['middleware' => ['auth', 'changepassword']], function () {

而且我也相信用ChangePassword写的逻辑是错误的......

应该是

  if (!auth()->user()->isAutoPasswordChanged()) {
    return redirect(route('auth.change.password.get'));
  }

  return $next($request);

首先,请使用route()函数代替简单字符串...如果您更改了web.php

的路线,则无需在此处更改网址

由于您已经在使用auth中间件,因此您无需执行auth()->check()

其次,条件中应该有 NOT 。因为如果AutoPassword NOT 已更改,则只会重定向到该路线,否则应该在下次请求时返回使用,而不是重定向到 / tests

答案 1 :(得分:0)

  1. 检查中间件app/Http/Kernel.php Doc
  2. 的注册情况
  3. 如果您有路由中间件,请比较app/Http/Kernel.php
  4. 中提供的名称

    但我的猜测是:

    1. 'middleware' => 'auth', 'changepassword'应该可以在'middleware' => ['auth', 'changepassword']

    2. 中更改
    3. 调试中间件本身是否被调用