JWTRoleAuth.php 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: wlalala
  5. * Date: 2019-04-17
  6. * Time: 13:55
  7. */
  8. namespace App\Http\Middleware;
  9. use Closure;
  10. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  11. use Tymon\JWTAuth\Exceptions\JWTException;
  12. use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
  13. class JWTRoleAuth extends BaseMiddleware
  14. {
  15. /**
  16. * Handle an incoming request.
  17. *
  18. * @param $request
  19. * @param Closure $next
  20. * @param null $role
  21. * @return mixed
  22. */
  23. public function handle($request, Closure $next, $role = null)
  24. {
  25. try {
  26. // 解析token角色
  27. $token_role = $this->auth->parseToken()->getClaim('role');
  28. } catch (JWTException $e) {
  29. /**
  30. * token解析失败,说明请求中没有可用的token。
  31. * 为了可以全局使用(不需要token的请求也可通过),这里让请求继续。
  32. * 因为这个中间件的责职只是校验token里的角色。
  33. */
  34. return $next($request);
  35. }
  36. // 判断token角色。
  37. if ($token_role != $role) {
  38. throw new UnauthorizedHttpException('jwt-auth', 'User role error');
  39. }
  40. return $next($request);
  41. }
  42. }