2015-09-20 56 views
2

所以,我有我的身份驗證的中間件,這是在Http/Kernel.php爲註冊:我如何建立中間件laravel

protected $routeMiddleware = [ 
    'auth' => \App\Http\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
]; 

接下來,我做了一個變化中的身份驗證類中間件手柄功能:

public function handle($request, Closure $next) 
{ 
    if ($this->auth->check()) { 
     $user = $this->auth->user(); 

     $currentDateTime  = strtotime('Y-m-d H:i:s'); 
     $tokenExpirationTile = strtotime($user->token_expiration); 

     if ($currentDateTime <= $tokenExpirationTile) { 
      return $next($request); 
     } else { 
      $this->auth->logout(); 
      redirect('home/login')->with('message', 'Your session has expired. Please login in again'); 
     } 
    } else { 
     redirect('home/login')->with('message', 'Please login before attempting to access that'); 
    } 
} 

最後我創造的路線:

Route::get('home/dashboard', '[email protected]', ['middleware' => 'auth']); 

我可以訪問這個狂勝e但作爲非登錄用戶,我應該重定向。

當我通過dd()中的handle函數沒有任何反應。

如何讓它在此路線上運行此方法?

另外當談到其他控制器,你需要在每個動作請求之前進行身份驗證你如何說:「在每個動作之前,運行此方法。」在鐵軌我會做before_action :method_name

+0

你的dd()在哪裏?如果你把 $ this-> middleware('auth'); 在您的HomeController構造函數中。根據文檔「但是,在控制器的構造函數中指定中間件更方便」。 – ExoticChimp

+0

@ExoticChimp我只希望它能夠在特定的控制器動作上工作 – TheWebs

+0

請檢查我的答案中的文檔。你把它放在你的構造函數中:$ this-> middleware('auth',['only'=> ['dashboard']]); – ExoticChimp

回答