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

Laravel 4中Redirect::back()返回空URL,需实现登录后重定向至用户输入URL

解决认证后重定向至用户初始输入URL的问题

你当前的代码没有记录用户原本想要访问的目标URL,而且Redirect::back()在用户直接访问登录页的场景下会返回空URL,这就是核心问题所在。下面是完整的解决方案:

步骤1:未认证时保存目标URL到Session

修改你的index方法,当检测到用户未认证时,先把当前请求的完整URL存入Session,再返回登录视图,这样就能记住用户最初想访问的页面:

public function index() {
    if(!Auth::check()) {
        // 保存用户原本要访问的完整URL到session
        session()->put('url.intended', request()->fullUrl());
        return View::make('adminLogin');
    }
    return Redirect::to('admin');
}

步骤2:登录成功后重定向至目标URL

修改login方法,在验证通过、登录成功后,使用Redirect::intended()方法——这个方法会自动读取我们存在Session里的目标URL,优先跳转到那里;如果Session里没有记录(比如用户直接访问登录页),则跳转到你指定的默认页面(这里是admin):

public function login() {
    $creds = array(
        'username' => Input::get('username'),
        'password' => Input::get('password')
    );

    if (Auth::attempt($creds)) {
        // 优先跳转到用户最初想访问的URL,否则跳转到admin页面
        return Redirect::intended('admin');
    } else {
        // 登录失败时返回登录页,保留用户输入并提示错误
        return Redirect::back()->withInput()->withErrors(['login' => '用户名或密码错误']);
    }
}

修复Redirect::back()返回空URL的问题

如果在登录失败场景下仍然想用Redirect::back(),可以给它添加一个兜底跳转地址,避免出现空URL的情况:

// 替代原来的Redirect::back(),为空时跳转到admin页面
return Redirect::back()->fallback(route('admin'))->withInput()->withErrors(...);

方案说明

  • session()->put('url.intended', ...):专门存储用户想要访问的目标URL,Laravel的intended方法会自动读取这个Session键值。
  • Redirect::intended():Laravel内置的适配方法,完美解决“登录后跳转到原页面”的场景,比手动处理Session更可靠。
  • fallback():为back()方法提供安全兜底,当没有上一页的记录时,会跳转到指定的默认地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:39:51