我已经创建了一个自定义中间件,我正在检查密码字段是否为空,并重定向用户更改密码,但它给予我重定向错误,任何人都可以帮助?让我添加更多详细信息,我希望用户重定向到/change-password如果密码字段为空
整个过程就是这样
用户验证电子邮件,如果数据库中的密码字段为空,则重定向到/change-password路由而不是 Jmeter 板,否则我们将其重定向到 Jmeter 板。用户不应访问任何路由,直到他们没有更新密码。
记住我用的是laravel breeze
中间件代码:
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ChangePasswordMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
$user = Auth::user();
if (empty($user->password)){
return redirect()->route('patient.password');
} else{
return redirect()->intended(RouteServiceProvider::HOME);
}
return $next($request);
}
}
我的路线:
Route::middleware(['auth', 'verified', 'changepassword'])->group(function (){
Route::get('/change-password', [PatientsController::class, 'passwordView'])->name('patient.password');
Route::get('/dashboard', [PatientsController::class, 'index'])->name('patient.dashboard');
Route::get('pricing', [PatientsController::class, 'pricing'])->name('patient.pricing');
});
changepassword注册在我的kernel.php中,它是一个定制的中间件。
我已经尝试为路由创建一个不同的组,但它仍然不起作用,我希望changepassword中间件强制使用更改密码和其他路由,直到更新密码字段才起作用
2条答案
按热度按时间2hh7jdfx1#
正如在评论中提到的,中间件被一遍又一遍地调用,因为密码是空的。因此,太多重定向的问题。您的路由必须忽略/change-password的路由。
在此之后,你太多的重定向问题应该会消失。
另外,确保
handle()
方法中的if/else逻辑是正确的,因为else
逻辑看起来很奇怪。dfuffjeb2#
试试看
如果密码为空,则会自动重定向到
/change-password
route。