我目前正在开发和应用程序,它有一个我希望可以通过中间件访问的API,它将检查用户是否使用Laravel的默认Auth中间件和Tymone的JWT.Auth令牌进行身份验证中间件,因此请求可以通过任何一种方式进行身份验证。
我可以弄清楚如何拥有一个或另一个但不是两个,我怎么能这样做?我认为我需要创建一个使用这些现有中间件的自定义中间件?
我正在使用Laravel 5.1
由于
答案 0 :(得分:3)
原来我确实需要制作比我想象的更容易的中间件:
<?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路由组中使用这个中间件,就像在内核中注册一样:
Route::group(['prefix' => 'api', 'middleware' => ['api.auth']], function() {
答案 1 :(得分:0)
我认为您可以在routes.php文件中使用Route::group
并定义要在数组中使用的中间件。
Route::group(['middleware' => ['auth', 'someOtherMiddleware']], function()
{
Route::get('api/somethinglist', function(){
return App\Something::all();
});
});
如果我没有弄错,那么根据您在数组中指定的中间件检查该路由组中定义的所有路由。