AuthMiddleware.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. namespace app\middleware;
  3. use Shopwwi\WebmanAuth\Auth;
  4. use Shopwwi\WebmanAuth\JWT;
  5. use Webman\Http\Request;
  6. use Webman\Http\Response;
  7. use Webman\MiddlewareInterface;
  8. class AuthMiddleware implements MiddlewareInterface
  9. {
  10. public function process(Request $request, callable $handler): Response
  11. {
  12. try {
  13. $controller = new \ReflectionClass($request->controller);
  14. $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin']??[];
  15. if (empty($noNeedLogin) || !in_array($request->action, $noNeedLogin)) {
  16. $type = $request->header('api-type','');
  17. if (empty($type)) return json(['code'=> 0,'msg'=> trans("error.param")]);
  18. $token = $request->header("Authorization","");
  19. if (empty($token)) return json(['code'=> 0,'msg'=> trans("error.request")]);
  20. $guard = "admin";
  21. if ($type == 'mini') {
  22. $guard = "user";
  23. }
  24. (new JWT)->guard($guard)->verify();
  25. $user = (new Auth)->guard($guard)->user();
  26. if (empty($user)) return json(['code'=>401,'msg'=> trans("error.login")]);
  27. $request->user = $user->toArray();
  28. }
  29. } catch (\Throwable $throwable) {
  30. return json(['code'=> 500,'msg'=> $throwable->getMessage()]);
  31. }
  32. $response = $request->method() == 'OPTIONS' ? response('',204) : $handler($request);
  33. return $response;
  34. }
  35. }