Laravel登录提交后未跳转至xwelcome仪表盘页面问题求助
Laravel自定义登录后未正常跳转问题排查
问题现象
实现登录后重定向到xwelcome.blade.php主仪表盘的功能时,填写测试账号点击登录按钮后未完成预期跳转,浏览器地址栏显示地址为:
https://example.com/login?_token=0GddRaD453thhRFL7KWgEQ5DnZ3q7B4rL5gaajuM
现有代码
路由配置
Route::get('xwelcome', [CustomAuthController::class, 'xwelcome']); Route::get('login', [CustomAuthController::class, 'index'])->name('login'); Route::post('custom-login', [CustomAuthController::class, 'customLogin'])->name('login.custom'); Route::get('registration', [CustomAuthController::class, 'registration'])->name('register-user'); Route::post('custom-registration', [CustomAuthController::class, 'customRegistration'])->name('register.custom'); Route::get('logout', [CustomAuthController::class, 'logOut'])->name('logout');
CustomAuthController控制器代码
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Hash; use Session; use App\Models\User; use Illuminate\Support\Facades\Auth; class CustomAuthController extends Controller { public function index() { return view('auth.login'); } public function customLogin(Request $request) { $request->validate([ 'email' => 'required', 'password' => 'required', ]); $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { return redirect()->intended('xwelcome') ->withSuccess('Signed in'); } return redirect("login")->withSuccess('Login details are not valid'); } public function registration() { return view('auth.registration'); } public function customRegistration(Request $request) { $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|min:6', ]); $data = $request->all(); $check = $this->create($data); return redirect("xwelcome")->withSuccess('You have signed-in'); } public function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']) ]); } public function dashboard() { if(Auth::check()){ return view('xwelcome'); } return redirect("login")->withSuccess('You are not allowed to access'); } public function logOut() { Session::flush(); Auth::logout(); return Redirect('login'); } }
登录表单代码
<form role="form" method="post" action="{{ route('login.custom') }}"> @csrf <div class="mt-4"> <div class="form-group"> <label class="form-control-label">Email address</label> <div class="input-group input-group-merge"> <div class="input-group-prepend"> <span class="input-group-text"><i class="fas fa-user"></i></span> </div> <input type="email" class="form-control" id="input-email" placeholder="name@example.com"> </div> </div> <div class="form-group mb-4"> <div class="d-flex align-items-center justify-content-between"> <div> <label class="form-control-label">Password</label> </div> <div class="mb-2"> <a href="#!" class="small text-muted text-underline--dashed border-primary">Lost password?</a> </div> </div> <div class="input-group input-group-merge"> <div class="input-group-prepend"> <span class="input-group-text"><i class="fas fa-key"></i></span> </div> <input type="password" class="form-control" id="input-password" placeholder="Password"> <div class="input-group-append"> <span class="input-group-text"> <a href="#" data-toggle="password-text" data-target="#input-password"> <i class="fas fa-eye"></i></a> </span> </div> </div> </div> <button type="submit" class="btn btn-sm btn-primary btn-icon rounded-pill"> <span class="btn-inner--icon"><i class="fas fa-long-arrow-alt-right"></i></span> Sign In </button> </div> </form>
问题原因
逐行排查后发现3处问题,直接导致登录跳转失败:
- 登录表单输入框缺少
name属性:邮箱、密码输入框只配置了id,没有加name="email"和name="password",后端无法从请求中获取到这两个必填参数,触发验证失败自动重定向回登录页,这是当前跳转失败的核心原因。 - xwelcome路由绑定的控制器方法不存在:路由中定义xwelcome路径绑定的是
CustomAuthController::xwelcome方法,但控制器里只有dashboard方法,没有对应的xwelcome方法,就算登录验证通过,跳转时也会报方法不存在的错误。 - 注册逻辑缺少登录状态写入:用户注册成功创建账号后,没有调用
Auth::login()写入登录会话,直接跳转xwelcome页面会被未登录拦截逻辑打回登录页。
修复方案
按顺序修改对应代码即可:
- 补全登录表单输入框的name属性:
- 邮箱输入框添加
name="email",修改后代码:<input type="email" name="email" class="form-control" id="input-email" placeholder="name@example.com"> - 密码输入框添加
name="password",修改后代码:<input type="password" name="password" class="form-control" id="input-password" placeholder="Password">
- 邮箱输入框添加
- 修正xwelcome路由的控制器方法绑定,直接把路由里的方法名改成已有的
dashboard即可,修改后路由:Route::get('xwelcome', [CustomAuthController::class, 'dashboard']); - 补全注册成功后的登录逻辑,在创建用户后调用
Auth::login()写入会话,修改customRegistration方法:public function customRegistration(Request $request) { $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|min:6', ]); $data = $request->all(); $user = $this->create($data); Auth::login($user); // 写入登录会话 return redirect("xwelcome")->withSuccess('You have signed-in'); }
修改完成后执行php artisan route:clear清除路由缓存,再测试登录即可正常跳转。
内容的提问来源于stack exchange,提问作者Michael T
相关产品推荐
相关产品推荐

