路由重定向到自定义位置
Routes redirect to custom location
当我尝试访问 admin/someSecureThing
中的任何内容时,我被重定向到 /
。我怎样才能改变它,以便我被重定向回 admin/login
?
路线:
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'web'], function() {
/* Admin Auth */
Route::get('login', 'Auth\AuthController@getLogin');
Route::post('login', 'Auth\AuthController@postLogin');
Route::get('register', 'Auth\AuthController@getRegister');
Route::post('register', 'Auth\AuthController@postRegister');
Route::get('logout', 'Auth\AuthController@getLogout');
Route::group(['middleware' => 'auth'], function(){
/*Admin Dashboard Routes */
Route::get('dashboard', 'AdminController@getDashboard');
});
});
在您的AuthController.php中您可以设置:
protected $loginPath = 'admin/login';
请注意,如果用户尝试访问受保护的路由,$loginPath
不会更改用户被退回的位置。这是由 App\Http\Middleware\Authenticate 中间件的 handle 方法控制的。
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('admin/login');
}
}
return $next($request);
}
如果您使用的是自定义 AuthController,那么创建自定义中间件可能会更好。
php artisan make:middleware AdminAuthController
这将在 app\Http\Middleware 文件夹下创建一个 AdminAuthController.php。
接下来我们将像上面一样编辑 handle 函数,但还要确保:
use Illuminate\Support\Facades\Auth;
完成后,我们需要在 app\Http\Kernel.php
下注册我们的新中间件
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'auth.admin' => \App\Http\Middleware\AdminAuthController::class
];
之后你所要做的就是使用 auth.admin
中间件而不是
auth
任何你想要的路线。
您的路线将如下所示:
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'web'], function() {
Route::group(['middleware' => 'auth.admin'], function(){
/* Admin Auth */
Route::get('login', 'Auth\AuthController@getLogin');
Route::post('login', 'Auth\AuthController@postLogin');
Route::get('register', 'Auth\AuthController@getRegister');
Route::post('register', 'Auth\AuthController@postRegister');
Route::get('logout', 'Auth\AuthController@getLogout');
}
Route::group(['middleware' => 'auth'], function(){
/*Admin Dashboard Routes */
Route::get('dashboard', 'AdminController@getDashboard');
});
});
当我尝试访问 admin/someSecureThing
中的任何内容时,我被重定向到 /
。我怎样才能改变它,以便我被重定向回 admin/login
?
路线:
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'web'], function() {
/* Admin Auth */
Route::get('login', 'Auth\AuthController@getLogin');
Route::post('login', 'Auth\AuthController@postLogin');
Route::get('register', 'Auth\AuthController@getRegister');
Route::post('register', 'Auth\AuthController@postRegister');
Route::get('logout', 'Auth\AuthController@getLogout');
Route::group(['middleware' => 'auth'], function(){
/*Admin Dashboard Routes */
Route::get('dashboard', 'AdminController@getDashboard');
});
});
在您的AuthController.php中您可以设置:
protected $loginPath = 'admin/login';
请注意,如果用户尝试访问受保护的路由,$loginPath
不会更改用户被退回的位置。这是由 App\Http\Middleware\Authenticate 中间件的 handle 方法控制的。
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('admin/login');
}
}
return $next($request);
}
如果您使用的是自定义 AuthController,那么创建自定义中间件可能会更好。
php artisan make:middleware AdminAuthController
这将在 app\Http\Middleware 文件夹下创建一个 AdminAuthController.php。
接下来我们将像上面一样编辑 handle 函数,但还要确保:
use Illuminate\Support\Facades\Auth;
完成后,我们需要在 app\Http\Kernel.php
下注册我们的新中间件protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'auth.admin' => \App\Http\Middleware\AdminAuthController::class
];
之后你所要做的就是使用 auth.admin
中间件而不是
auth
任何你想要的路线。
您的路线将如下所示:
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'web'], function() {
Route::group(['middleware' => 'auth.admin'], function(){
/* Admin Auth */
Route::get('login', 'Auth\AuthController@getLogin');
Route::post('login', 'Auth\AuthController@postLogin');
Route::get('register', 'Auth\AuthController@getRegister');
Route::post('register', 'Auth\AuthController@postRegister');
Route::get('logout', 'Auth\AuthController@getLogout');
}
Route::group(['middleware' => 'auth'], function(){
/*Admin Dashboard Routes */
Route::get('dashboard', 'AdminController@getDashboard');
});
});