AuthMiddleware.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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) || !in_array($type,['web','routine'])) return json(['code'=> 0,'msg'=> trans("error.param")]);
  18. if($type =='web'){
  19. $key = 'admin';
  20. }
  21. if($type =='routine'){
  22. $key = 'user';
  23. }
  24. $token = $request->header("Authorization","");
  25. if (empty($token)) return json(['code'=> 0,'msg'=> trans("error.request")]);
  26. (new JWT)->guard($key)->verify();
  27. $user = (new Auth)->guard($key)->user();
  28. if (empty($user)) return json(['code'=>401,'msg'=> trans("error.login")]);
  29. $request->user = $user->toArray();
  30. }
  31. } catch (\ReflectionException $exception) {
  32. return json(['code'=> 500,'msg'=> $exception->getMessage()]);
  33. }
  34. $response = $request->method() == 'OPTIONS' ? response('',204) : $handler($request);
  35. // 给响应添加跨域相关的http头
  36. // $response->withHeaders([
  37. // 'Access-Control-Allow-Credentials' => 'true',
  38. // 'Access-Control-Allow-Origin' => $request->header('origin', '*'),
  39. // 'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'),
  40. // 'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', '*'),
  41. // ]);
  42. return $response;
  43. }
  44. }