2016-08-20 126 views
0

我为我的Laravel REST API使用Tymon/JWT-Auth软件包。在我的routes.php文件中,我可以添加用于未经身份验证的用户的路由以及经过身份验证的用户的路由。如何允许任何用户使用Laravel JWT身份验证访问路线?

未认证用户的路由将忽略授权标头。但是,我想要一个路由组,如果头部有效,可以使用授权的用户数据,如果没有设置或无效,请执行其他操作。

有什么办法可以实现这样的功能,或者可能是JWTAuth包内置中间件的解决方案?

回答

0

为了解决这个难题,我根据JWTAuth GetUserFromToken中间件创建了自己的中间件,并将其添加到内核文件中的routeMiddleware数组中。

RouteMiddleware

<?php 

namespace App\Http\Middleware; 

use Tymon\JWTAuth\Exceptions\JWTException; 
use Tymon\JWTAuth\Exceptions\TokenExpiredException; 

class NeutralRoute extends \Tymon\JWTAuth\Middleware\BaseMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, \Closure $next) 
    { 
     $token = $this->auth->setRequest($request)->getToken(); 

     if($token){ 
      try { 
       $user = $this->auth->authenticate($token); 
      } catch (TokenExpiredException $e) { 
       return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]); 
      } catch (JWTException $e) { 
       return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]); 
      } 
      if($user){ 
       $this->events->fire('tymon.jwt.valid', $user); 
      } 
     } 

     return $next($request); 
    } 
} 
相关问题