You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 7.4中redirect()->intended始终返回email/verify,登录跳转异常求助

Laravel 7.4 登录后重定向至来源页面问题解决

问题根源

你遇到的情况是intended()始终返回website.com/email/verify,最终跳转到HOME页面,核心原因是session中url.intended的值没有被正确清除。大概率是用户之前访问过需要邮箱验证的页面,EnsureEmailIsVerified中间件将当前请求地址存入了url.intended,即便用户已经完成邮箱验证,这个session值依然存在。登录后intended()读取到这个值,尝试跳转至/email/verify,但由于用户已验证,该页面会自动重定向到HOME,所以你看到的最终结果是HOME页面。

解决方案

1. 邮箱验证成功后清除session值

找到项目中的VerificationController,在verify方法(处理邮箱验证的逻辑)末尾添加清除url.intended的代码:

public function verify(Request $request)
{
    // 原有验证逻辑...
    
    // 清除intended地址
    session()->forget('url.intended');
    
    return redirect()->route('home');
}

2. 在RedirectIfAuthenticated中过滤无效地址

修改RedirectIfAuthenticated文件,判断如果intended地址是邮箱验证页面,就替换为实际来源或HOME:

public function handle($request, Closure $next, ...$guards)
{
    $guards = empty($guards) ? [null] : $guards;

    foreach ($guards as $guard) {
        if (Auth::guard($guard)->check()) {
            $intendedUrl = redirect()->intended(RouteServiceProvider::HOME)->getTargetUrl();
            // 过滤邮箱验证页面
            if (strpos($intendedUrl, '/email/verify') !== false) {
                // 优先取请求头中的来源地址,没有则用HOME
                $referer = $request->headers->get('referer');
                return redirect($referer ?: RouteServiceProvider::HOME);
            }
            return redirect()->intended(RouteServiceProvider::HOME);
        }
    }

    return $next($request);
}

3. 排查中间件配置

检查项目中是否有自定义中间件或全局中间件,错误地给已验证用户设置了url.intended值;同时确认EnsureEmailIsVerified中间件仅应用在需要邮箱验证的路由上,避免不必要的拦截。

排查步骤

  • 在登录页面的控制器或视图中添加dd(session('url.intended'));,登录前查看该值是否已经是/email/verify,确认session值的来源。
  • 检查路由文件,确认EnsureEmailIsVerified中间件的应用范围,避免覆盖不需要验证的路由。

内容的提问来源于stack exchange,提问作者Vedran Korponajic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:45:34