获取用户在Laravel中重定向的URL并添加为URL参数

时间:2014-11-03 13:54:41

标签: php laravel laravel-4 laravel-routing

我刚刚在我的电脑上安装了Laravel,我遇到了路由问题。当用户在未登录的情况下键入网址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'));

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

=== CLARIFICATION ===

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

3 个答案:

答案 0 :(得分:1)

为什么不使用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()));
});

答案 1 :(得分: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

答案 2 :(得分:0)

您可以修改“auth”过滤器。如果用户未登录,请重定向到登录页面。

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