我刚刚在我的电脑上安装了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。
答案 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 section和routing section。
答案 2 :(得分:0)
您可以修改“auth”过滤器。如果用户未登录,请重定向到登录页面。
Route::filter('auth', function(){
if Auth::guest(){
// sign them in
}
else{
return Redirect::to('pathToLogin');
}
};