Laravel 10中用户注册后跳转登录页而非仪表盘的最优方法
Laravel 10 注册后跳转至登录页的解决方案
你之前修改RedirectIfAuthenticated中间件的思路不对,这个中间件的作用是拦截已登录用户访问登录/注册页面,而非控制注册成功后的跳转逻辑。下面是两种最优实现方式:
方式一:修改默认Auth脚手架的注册控制器
如果你用的是Laravel Breeze、Jetstream等官方脚手架生成的认证系统,找到app/Http/Controllers/Auth/RegisteredUserController.php,修改store方法的返回逻辑:
原代码(默认跳转至仪表盘):
return redirect(RouteServiceProvider::HOME);
修改为跳转登录页:
return redirect()->route('login')->with('status', '注册成功,请登录');
方式二:自定义注册逻辑(不自动登录用户)
如果是自己写的注册逻辑,确保创建用户后不执行自动登录,直接跳转登录页:
use App\Models\User; use Illuminate\Support\Facades\Hash; // 处理注册请求,创建用户 $user = User::create([ 'name' => $request->input('name'), 'email' => $request->input('email'), 'password' => Hash::make($request->input('password')), ]); // 不要调用 Auth::login($user); 这一步会自动登录用户 return redirect()->route('login')->with('success', '注册成功,请登录');
恢复中间件的正确配置
记得把之前修改的RedirectIfAuthenticated中间件改回默认逻辑,避免已登录用户访问登录页时出现循环跳转:
class RedirectIfAuthenticated { public function handle(Request $request, Closure $next, string ...$guards): Response { $guards = empty($guards) ? [null] : $guards; foreach ($guards as $guard) { if (Auth::guard($guard)->check()) { return redirect(RouteServiceProvider::HOME); } } return $next($request); } }
内容的提问来源于stack exchange,提问作者Gilles Ashley
相关产品推荐
相关产品推荐

