CheckLogin.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\app\middleware;
  8. use ReflectionClass;
  9. use Webman\Http\Request;
  10. use Webman\Http\Response;
  11. use Webman\MiddlewareInterface;
  12. use Tinywan\Jwt\JwtToken;
  13. use plugin\saiadmin\exception\ApiException;
  14. /**
  15. * 登录检查中间件
  16. */
  17. class CheckLogin implements MiddlewareInterface
  18. {
  19. public function process(Request $request, callable $handler): Response
  20. {
  21. // 通过反射获取控制器哪些方法不需要登录
  22. $controller = new ReflectionClass($request->controller);
  23. $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? [];
  24. // 访问的方法需要登录
  25. if (!in_array($request->action, $noNeedLogin)) {
  26. try {
  27. $token = JwtToken::getExtend();
  28. $request->setHeader('check_login', true);
  29. $request->setHeader('check_admin', $token);
  30. } catch (\Throwable $e) {
  31. throw new ApiException('您的登录凭证错误或者已过期,请重新登录', 401);
  32. }
  33. }
  34. return $handler($request);
  35. }
  36. }