【问题标题】:Getting the URL from where the user redirected in Laravel and add as URL parameter获取用户在 Laravel 中重定向的 URL 并添加为 URL 参数
【发布时间】:2014-12-30 04:50:24
【问题描述】:

我刚刚在我的电脑上安装了 Laravel,但我遇到了路由问题。当用户在没有登录的情况下键入 URL http://laravel.app/admin 时,我想将其重定向到 http://laravel.app/login?Return_URL=http://laravel.app/admin,就像 Jeffrey Way 对 Laracast 所做的那样。

我该怎么做?

我已经将它添加到我的 routes.php 中

Route::get('/admin', array('before' => 'auth', 'as' => 'admin.index', 'uses' => 'AdminController@index'));

而且我不知道下一步该做什么。

=== 澄清 ===

当用户访问受保护的页面/admin/admin/{{other-page}} 时,我希望将其重定向到/login,但在重定向到登录页面之前使用URL 参数。成功登录后,用户将被重定向到他打算访问的第一个 URL,该 URL 在 ?Return_URL= 参数中捕获。

【问题讨论】:

    标签: php laravel laravel-4 laravel-routing


    【解决方案1】:

    您应该有一个位于 app/filters.php 的过滤器文件。如果你打开它,你应该会看到这样的东西:

    Route::filter('auth', function()
    {
    
    });
    

    这是在提供路线之前触发的功能。如果他们没有登录,你可以在这里重定向。例如:

    Route::filter('auth', function()
    {
        if (!Auth::check())
        {
            // The user is not logged in so redirect them
        }
    });
    

    有关更多信息,请查看文档的 security sectionrouting section

    【讨论】:

    • 我已经打开了那个文件。但是你错过了我的意思。当我应用过滤器auth时,我想在登录到他被重定向到login之前的URL后重定向用户
    • 好吧,你的问题不清楚,这就是你想要的
    【解决方案2】:

    为什么不使用Redirect::intended('fallback')?这会将用户重定向回他打算查看的页面。您还可以提供一个后备网址。

    您可以阅读更多关于它的信息here

    编辑: 更具体地说,您可以这样做:

    Route::group(array('prefix' => 'admin','before' => 'auth'),function(){
        //here you're admin routes
    });
    

    在过滤器文件中,您将身份验证过滤器更改为:

    Route::filter('auth',function(){
        if(!Auth::check())
           return Redirect::guest('login');
    });
    

    guest 方法使预期的 url 保存在会话中。 在登录页面上,您可以在尝试用户凭据后执行此操作:

    Route::intended('fallback');
    

    但是当你真的想用查询参数来做的时候,就这样做吧:

    Route::filter('auth',function(){
        if(!Auth::check())
           return Redirect::to('login',array('Return_URL' => Route::current()));
    });
    

    【讨论】:

    • 这似乎是促进最佳实践的唯一答案。但是,我觉得您可能应该将您的答案扩大(仅链接的答案是自找麻烦),并提及与Redirect::intended() 一起使用的Redirect::guest()
    • 所以你的意思是我必须制作大量的Redirect::intended('fallback'),因为用户也有可能输入链接/admin/show/ 和其他也受保护的页面?
    • @alexrssell 你是对的。我用更多信息更新了答案。
    【解决方案3】:

    您可以修改您的“身份验证”过滤器。如果用户未登录,则重定向到登录页面。

    Route::filter('auth', function(){
        if Auth::guest(){
          // sign them in
        }
        else{
            return Redirect::to('pathToLogin');
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2012-10-15
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 2014-11-03
      • 1970-01-01
      相关资源
      最近更新 更多