【问题标题】:Laravel Middleware Auth for APILaravel 中间件 API 认证
【发布时间】:2016-04-27 13:28:21
【问题描述】:

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

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

我正在使用 Laravel 5.1

谢谢

【问题讨论】:

    标签: php laravel authentication laravel-5.1 laravel-middleware


    【解决方案1】:

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

    <?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() {
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 这是正确的,但这意味着两个中间件都必须通过,而不是一个或两个。
      • 啊,好吧,我以为这就是你想要的,但我现在明白你在追求什么了。无论如何,很高兴你解决了!
      猜你喜欢
      • 2021-03-24
      • 2020-07-25
      • 2017-12-30
      • 2017-06-27
      • 2020-11-09
      • 1970-01-01
      • 2017-10-05
      • 2015-11-05
      • 2019-03-01
      相关资源
      最近更新 更多