2016-01-21 63 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