我正在使用laravel用于我的web应用程序和routes.php我有:
// admin routes
Route::group(array('before' => 'auth'), function()
{
Route::controller('admin', 'UsersController');
});
我想保护并检查此人是否已登录,但此代码始终重定向到" / login"我希望它重定向到" admin / login" ,这可以吗?
答案 0 :(得分:13)
auth
文件中有一个默认的filters.php
过滤器,它应该是这样的:
Route::filter('auth', function($route, $request)
{
if (Auth::guest()) return Redirect::guest('login'); // /login url
});
此过滤器(如上所示)将检查用户是否未登录,然后将发生重定向,并且用户将被发送到/login
url
,否则将不会发生任何事情,用户将被发送到请求的页面。
此外,默认情况下可以使用filter
,此filter
只检查用户是否已登录,然后他将被重定向到/
(主页)默认值:
Route::filter('guest', function($route)
{
if (Auth::check()) return Redirect::to('/'); // you may change it to /admin or so
});
此guest
)过滤器与/login
一起使用,如下所示,因此如果登录用户打算登录,则默认情况下用户将被重定向到主页:
Route::get('login', array('before' => 'guest', 'uses' => 'UsersController@getLogin'));
现在,在您的routes.php
文件中,您声明了以下路线:
Route::group(array('before' => 'auth'), function()
{
Route::controller('admin', 'UsersController');
});
如果一切正常,那么此设置应该有效。如果已注销的用户尝试访问admin
,则系统会将用户发送到login
,默认情况下这些用户可以使用。
答案 1 :(得分:0)
是。添加以下过滤器:
Route::filter('auth.admin', function()
{
if (Auth::guest()) return Redirect::guest('admin/login');
});
我复制了与Laravel一起提供的原始auth
过滤器。
接下来,使用新的过滤器:
Route::group(array('before' => 'auth.admin'), function()
{
Route::controller('admin', 'UsersController');
});
答案 2 :(得分:0)
完整的解决方案:
Route::filter('auth.admin', function() {
// if not logged in redirect to the login page
if (Auth::guest()) return Redirect::guest('admin/login');
});
Route::filter('auth.login', function() {
// if already logged in don't show login page again
if (Auth::check()) return Redirect::to('admin');
});
Route::get('admin/login', ['before' => 'auth.login', 'uses' => 'UsersController@getLogin']);
Route::group(['before' => 'auth.admin'], function () {
Route::controller('admin', 'UsersController');
});