【问题标题】:Laravel - Redirect::intended route not workingLaravel - Redirect::intended route 不起作用
【发布时间】:2023-03-07 08:03:01
【问题描述】:

我有一个 laravel 构建的博客,要对帖子发表评论(如果您已注销),您必须登录。我放了一个这样的链接:

<a href="{{ URL::route('login') }}">login</a> to do this.

这会重定向到登录表单,一旦填写完毕并且用户通过身份验证,我就有这个:

return Redirect::intended('/');

这会将用户带到主页,不是他们打算访问的页面,在这种情况下,是他们点击 login 链接以便能够发表评论的帖子的页面.在这种情况下,如何将它们返回到预期的 url?

【问题讨论】:

    标签: laravel routes


    【解决方案1】:

    实际上,Redirect::intended('/') 可以在会话中有可用的密钥为 url.intended 时起作用,否则它会重定向到默认的 URL,在您的情况下为“/”,所以您肯定没有放 @987654326 @在会话中。要做到这一点,您可以使用以下方式将URL 放入会话中:

    Session::put('url.intended', 'url...');
    

    所以,很可能,在登录链接中,您可以添加如下查询字符串:

    <a href="{{ URL::route('login') }}?intended=1">login</a>
    

    因此,您可以跟踪重定向并在该路由的方法中(在返回 View 之前)只需将之前的 URL 放入会话中,使用如下所示:

    if(Input::get('intended')) {
        Session::put('url.intended', URL::previous());
    }
    

    然后在从那里重定向之前,您应该使用以下方式从会话中删除 URL

    $intendedUrl = Session::get('url.intended', url('/'));
    Session::forget('url.intended');
    return Redirect::to($intendedUrl);
    

    这应该可以解决问题。另外,您可以查看this answer,可能会有所帮助。

    【讨论】:

    • Hmmm.. 我一直在阅读这种方法,但我看到还有其他人也有这种方法,特别是使用预期会话中出现的问题似乎有问题:github.com/laravel/framework/issues/5940 我会认为有更好的方法。
    【解决方案2】:

    Redirect::intended 需要两个部分才能工作。第一种是当用户尝试访问受限页面 /orders 但他们没有登录时,您通过以下方式将他们重定向到登录页面:

    redirect()->guest('/login');
    

    如果身份验证成功,则在您的登录回传中调用:

    redirect()->intended('/dashboard');
    

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 2018-05-16
      • 2019-01-23
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多