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');
});
答案 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)
app/Http/Kernel.php
Doc app/Http/Kernel.php
但我的猜测是:
'middleware' => 'auth', 'changepassword'
应该可以在'middleware' => ['auth', 'changepassword']
调试中间件本身是否被调用