Jetstream Laravel登录未校验数据库且返回登录页,如何配置登录后重定向路由
Laravel Jetstream 登录后跳转指定路由及用户校验问题修复方案
1. 修复用户信息校验逻辑
默认配置下如果未自定义登录校验规则,Jetstream可能不会主动抛出校验失败的提示,直接重定向回登录页,按以下步骤配置数据库校验规则:
打开app/Providers/FortifyServiceProvider.php,在boot方法中添加校验逻辑:
use Laravel\Fortify\Fortify; use Laravel\Fortify\Http\Requests\LoginRequest; use Illuminate\Validation\ValidationException; public function boot() { Fortify::authenticateUsing(function (LoginRequest $request) { // 从数据库查询用户 $user = \App\Models\User::where('email', $request->email)->first(); // 校验用户存在且密码匹配 if (! $user || ! \Hash::check($request->password, $user->password)) { throw ValidationException::withMessages([ 'email' => ['账号或密码错误'], ]); } // 可选:自定义额外校验,比如账号是否启用、邮箱是否验证 if (! $user->is_active) { throw ValidationException::withMessages([ 'email' => ['该账号已被禁用'], ]); } return $user; }); }
如果开启了邮箱验证功能,需要确认测试用户的email_verified_at字段不为空,或者在config/fortify.php的features数组中注释掉Features::emailVerification()关闭该特性。
2. 配置登录成功跳转规则
可根据需求选择任意一种配置方式:
- 方式一:全局配置默认跳转地址
打开config/fortify.php,修改home配置项为目标路由地址:// 直接写路径 'home' => '/dashboard', // 或使用已注册的路由名 'home' => env('FORTIFY_HOME', route('admin.dashboard')), - 方式二:自定义响应实现灵活跳转(支持按用户角色跳转)
打开app/Providers/FortifyServiceProvider.php,在register方法中绑定登录响应:use Laravel\Fortify\Contracts\LoginResponse; public function register() { $this->app->instance(LoginResponse::class, new class implements LoginResponse { public function toResponse($request) { // 示例:管理员跳后台,普通用户跳个人中心 if (auth()->user()->is_admin) { return redirect()->route('admin.dashboard'); } return redirect()->route('user.center'); } }); }
3. 生效配置
修改完成后执行以下命令清除缓存避免配置不生效:
php artisan config:clear php artisan route:clear
内容的提问来源于stack exchange,提问作者Mohamad
相关产品推荐
相关产品推荐

