2015-08-23 57 views
4

Laravel 5.1真的有最小的文檔.. 我需要了解如何保護使用驗證middileware路線清晰的想法..使用Laravel驗證的中間件

文檔講述了以「中間件」 =>「身份驗證」參數添加到路由。 還是能做到的

public function __construct() 
    { 
     $this->middleware('auth'); 
    } 

但如何使用驗證的中間件實際用戶認證和自動重定向從保護的途徑/登錄?

回答

6

在Kernel.php - 有這樣的保護下$ routeMiddleware註冊中間件:

/** 
* The application's route middleware. 
* 
* @var array 
*/ 
protected $routeMiddleware = [ 
    'auth' => 'App\Http\Middleware\Authenticate', 
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 
]; 

你可以看到 '權威性' 註冊爲使用App \ HTTP \中間件\驗證。

然後你就可以走這條道路 - 如果你打開/app/Http/Middleware/Authenticate.php, 你會發現公共職能手柄:

/** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($this->auth->guest()) 
     { 
      if ($request->ajax()) 
      { 
       return response('Unauthorized.', 401); 
      } 
      else 
      { 
       return redirect()->guest('auth/login'); 
      } 
     } 

     return $next($request); 
    } 

這裏就是重定向管理,並且您可以根據自己的需要對其進行修改,或者您可以創建自定義中間件。

最後 - 因爲它是寫在文件 - 控制器,這將需要進行身份驗證,您將添加

public function __construct() 
{ 
    $this->middleware('auth'); 
} 

您可以創建自定義的中間件如果提供者不適合您的需求。

+0

我已經做this..all ..我想留something..as我的控制器URL不能被重定向到登錄客人網址..我用用命令資源控制器 – harish

+0

所以是一個路由問題產生控制器?也許你需要自定義路線? –

+0

路線::組([ '前綴'=> '用戶'],函數(){ 路線::得到( '/',[ '用途'=> 'UserController中@索引']); 路線::匹配(['get'],'/ logout',['uses'=>'UserController @ logout']); Route :: match(['post','get'],'/ login',['uses '=>'UserController @ login']); Route :: match(['post','get'],'register',array('uses'=>「UserController @ register」)); Route :: get('/ profile',array('uses'=>「UserController @ profile」)); }); – harish

6

在laravel 5.2,如果你想隱藏的登記表或登錄表單的觀點,你應該用你的中間件:

$this->middleware('mymiddleware', ['only' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]); 

OR

$this->middleware('mymiddleware', ['except' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]); 

這是因爲需要註冊並登錄路線是AuthController的post方法,而showXxxxForm是表單視圖。

希望它可以幫助任何人。