Laravel 8.8中redirectTo函数失效,求助授权后执行该函数的方法
首先要明确两个核心逻辑的区别:你贴的auth-backend/RedirectsUsers中的代码实际属于RedirectIfAuthenticated中间件,它负责已登录用户访问登录/注册页时的跳转;而登录成功后的跳转逻辑,才由LoginController中redirectTo()方法(或RedirectsUsers trait)处理。
要让redirectTo()方法生效,按以下步骤排查修复:
1. 确保LoginController的继承与trait使用正确
Laravel默认的LoginController需继承AuthenticatesUsers trait(该trait已包含RedirectsUsers的跳转逻辑),代码结构应类似:
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\AuthenticatesUsers; class LoginController extends Controller { use AuthenticatesUsers; public function __construct() { $this->middleware('guest')->except('logout'); } // 你的自定义跳转逻辑 protected function redirectTo() { return '/test'; } }
2. 删除LoginController中的$redirectTo属性
如果LoginController中定义了protected $redirectTo = '/xxx';,框架会优先使用这个属性值,而忽略redirectTo()方法。请注释或删除该属性。
3. 检查是否重写了sendLoginResponse方法
如果你的LoginController重写了sendLoginResponse方法,必须确保它调用了$this->redirectPath()(该方法会自动触发redirectTo()),示例:
protected function sendLoginResponse(Request $request) { $request->session()->regenerate(); $this->clearLoginAttempts($request); // 关键:必须保留redirectPath()的调用 return $this->authenticated($request, $this->guard()->user()) ?: redirect()->intended($this->redirectPath()); }
4. 确认登录请求走默认的login方法
只有通过LoginController的login方法处理登录请求时,才会触发sendLoginResponse进而调用redirectTo()。如果是自定义登录逻辑,需手动调用跳转逻辑或对齐默认流程。
完成以上步骤后,用户登录成功就会执行redirectTo()方法中的自定义跳转,而非HOME常量或RedirectIfAuthenticated中间件的地址。
内容的提问来源于stack exchange,提问作者snirkl

