2016-01-21 48 views
1

我目前正在開發和應用程序,我希望通過中間件訪問API,以檢查用戶是否使用Laravel的默認Auth中間件和Tymone的基於JWT.Auth令牌的中間件進行身份驗證,可以通過任何一種方式進行驗證。Laravel中間件API的驗證

我可以計算出如何使其中一個或另一個不能同時使用,我怎麼能這樣做?我在想我需要創建一個使用這些現有中間件的定製中間件?

我使用Laravel 5.1

感謝

回答

1

原來我也需要讓我自己的中間件,比我想象的要簡單:

Route::group(['prefix' => 'api', 'middleware' => ['api.auth']], function() { 

<?php 

namespace App\Http\Middleware; 

use Auth; 
use JWTAuth; 
use Closure; 

class APIMiddleware { 

/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) {   
    try { 
     $jwt = JWTAuth::parseToken()->authenticate(); 
    } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) { 
     $jwt = false; 
    } 
    if (Auth::check() || $jwt) { 
     return $next($request); 
    } else { 
     return response('Unauthorized.', 401); 
    } 
} 
} 

然後我用這個中間件上我的API航線組像這樣在內核中註冊後

0

我認爲你可以在你的routes.php文件文件中使用Route::group並定義要在陣列中使用中間件。

Route::group(['middleware' => ['auth', 'someOtherMiddleware']], function() 
{ 
    Route::get('api/somethinglist', function(){ 
     return App\Something::all(); 
    }); 
}); 

如果我沒有記錯的這條路線組中定義的所有路線是對中間件()你在數組中指定檢查。

+0

這是正確的,但這意味着中間件必須通過而不是一個或兩個。 – rosscooper

+0

嗯,好吧,我以爲那是你想要的,但我現在看到了你以後的樣子。無論如何,很高興你能解決這個問題! – Dippner