4

我目前正在开发和应用程序,它有一个我希望通过中间件访问的 API,它将检查用户是否使用 Laravel 的默认 Auth 中间件和 Tymone 的基于 JWT.Auth 令牌的中间件进行身份验证,因此可以通过任何一种方式对请求进行身份验证。

我可以弄清楚如何拥有一个或另一个,但不能同时拥有,我怎么能这样做?我在想我需要创建一个使用这些现有中间件的自定义中间件吗?

我正在使用 Laravel 5.1

谢谢

4

2 回答 2

8

事实证明我确实需要制作自己的中间件,这比我想象的要容易:

<?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() {
于 2016-01-21T11:29:09.813 回答
-1

我认为您可以Route::group在您的 routes.php 文件中使用并定义要在数组中使用的中间件。

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

如果我没记错的话,该路由组中定义的所有路由都会根据您在数组中指定的中间件进行检查。

于 2016-01-21T11:22:11.850 回答