JWTRoleAuth.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Tymon\JWTAuth\Exceptions\JWTException;
  5. use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
  6. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  7. class JWTRoleAuth extends BaseMiddleware
  8. {
  9. /**
  10. * JWT 检测当前登录的平台
  11. *
  12. * @param \Illuminate\Http\Request $request
  13. * @param \Closure $next
  14. * @param null $role
  15. * @return mixed
  16. */
  17. public function handle($request, Closure $next, $role = null)
  18. {
  19. try {
  20. // 解析token角色
  21. $tokenRole = $this->auth->parseToken()->getClaim('role');
  22. } catch (JWTException $e) {
  23. /**
  24. * token解析失败,说明请求中没有可用的token。
  25. * 为了可以全局使用(不需要token的请求也可通过),这里让请求继续。
  26. * 因为这个中间件的责职只是校验token里的角色。
  27. */
  28. return $next($request);
  29. }
  30. // 判断token角色。
  31. if ($tokenRole != $role) {
  32. throw new UnauthorizedHttpException('jwt-auth', 'role is not auth.');
  33. }
  34. return $next($request);
  35. }
  36. }