路由重定向到自定义位置

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');    
    });
});