CheckLogin.php 1.8 KB

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