重定向到用户尝试访问的 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
本帖由系统于 7年前 自动加精
Luff
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 5

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

7年前 评论

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

7年前 评论

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

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

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

7年前 评论

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

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

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

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

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

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