重定向到用户尝试访问的 URL

使用场景:跳转到用户未登录前,尝试访问的 URL

使用

  1. 先在中间件中使用

    if (auth()->guard($guards)->guest()) {
        return redirect()->guest('login');
    }
  2. 再在用户登录验证通过后使用

    return redirect()->intended('home')

原理解析

  1. redirect()->guest('login)
    会在 session 中存储一个值, 把用户要访问的地址存到 session
    $this->session->put('url.intended', $this->generator->full());

  2. redirect()->intended('home') 会把这个值取出来跳转到这个地址,如果没有就跳到默认地址
    $path = $this->session->pull('url.intended', $default);
    return $this->to($path, $status, $headers, $secure);

本作品采用《CC 协议》,转载必须注明作者和本文链接
Luff
本帖由系统于 6年前 自动加精
Luff
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5

给楼主点个赞。。我突然意识到了我写的项目还有这个问题。。

6年前 评论

这个方法确实简单省事,楼主真细心。

6年前 评论

laravel 自带的 authentication 已经内置了这种跳转到之前的 url 功能。

return $this->authenticated($request, $this->guard()->user())
                ?: redirect()->intended($this->redirectPath());

如果想手动处理认证后的跳转,重写authenticated 方法,默认该方法是空的。

6年前 评论

我现在使用 redirect() 跳转的时候遇到问题 代码如下 if($rt) {

            redirect()->route('myshare',[Auth::user()->getAuthIdentifier()]);
        }     

也跳了 但是 浏览器地址没有变 显示空白页 这是什么原因导致的呢

4年前 评论
Luff (楼主) 4年前
fengzb (作者) 4年前

如果是Ajax请求,那么intended就无效了。因为redirect()好像不能用在于Ajax上。你们有办法没

4年前 评论
Luff (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!