Login.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace app\controller\common;
  3. use app\extra\basic\Base;
  4. use app\extra\service\basic\SmsService;
  5. use app\middleware\AuthMiddleware;
  6. use app\model\system\SystemUser;
  7. use Hzdad\Codecheck\Codecheck;
  8. use LinFly\Annotation\Route\Controller;
  9. use LinFly\Annotation\Route\Route;
  10. use Shopwwi\WebmanAuth\Auth;
  11. use support\Request;
  12. use support\Response;
  13. use think\facade\Db;
  14. use Tinywan\Captcha\Captcha;
  15. use Webman\Annotation\Middleware;
  16. #[Controller(prefix: "/api/login")]
  17. class Login extends Base
  18. {
  19. /**
  20. * 登陆
  21. * @param Request $request
  22. * @return Response
  23. */
  24. #[Route(path: "user",methods: "post")]
  25. public function setLogin(Request $request): Response
  26. {
  27. try {
  28. $param = $this->_valid([
  29. "username.require" => trans("empty.user"),
  30. "password.require" => trans("empty.passwd"),
  31. "code.require" => trans("empty.code"),
  32. "key.require" => trans("empty.data"),
  33. ],"post");
  34. if (!is_array($param)) return error($param);
  35. if (Captcha::check($param['code'],$param['key']) === false) return errorTrans("error.captcha");
  36. $map = ["is_deleted" => 0,"username" => $param['username']];
  37. [$state,$msg,$user] = $this->checkLogin($map,2,$param);
  38. if (!$state) return error($msg);
  39. return successTrans("success.login",get_object_vars((new Auth)->guard("admin")->login($user)));
  40. } catch (\Throwable $throwable) {
  41. return error($throwable->getMessage());
  42. }
  43. }
  44. /**
  45. * 手机号码登陆
  46. * @param Request $request
  47. * @return Response
  48. */
  49. #[Route(path: "mobile",methods: "post")]
  50. public function setLogin2Mobile(Request $request): Response
  51. {
  52. try {
  53. $param = $this->_valid([
  54. "mobile.require" => trans("empty.mobile"),
  55. "code.require" => trans("empty.code"),
  56. "scene.require" => trans("empty.data"),
  57. ],"post");
  58. if (!is_array($param)) return error($param);
  59. $code = (new Codecheck)->mobile($param['mobile'])->scene($param['scene'])->code($param['code'])->delafterok(true)->check();
  60. print_r((new Codecheck)->getErrorMsg());
  61. if (!$code) return errorTrans("error.captcha");
  62. $map = ["is_deleted" => 0,"mobile" => $param['mobile']];
  63. [$state,$msg,$user] = $this->checkLogin($map);
  64. if (!$state) return error($msg);
  65. return successTrans("success.login",get_object_vars((new Auth)->guard("admin")->login($user)));
  66. } catch (\Throwable $throwable) {
  67. return error($throwable->getMessage());
  68. }
  69. }
  70. /**
  71. * 登录验证处理
  72. * @param array $map
  73. * @param int $type
  74. * @param array $param
  75. * @return array
  76. */
  77. protected function checkLogin(array $map = [],int $type = 1,array $param = []): array
  78. {
  79. $user = (new SystemUser)->where($map)->findOrEmpty();
  80. if ($user->isEmpty()) return [0,trans("error.user-empty"),[]];
  81. if ($user['status'] <> 1) return [0,trans("error.user-status"),[]];
  82. if ($type == 2) {
  83. if (md5($param['password'].$user['salt']) <> $user['password']) return [0,trans("error.passwd"),[]];
  84. }
  85. $user->login_at = getDateFull();
  86. $user->login_ip = request()->getRealIp();
  87. $user->login_num = Db::raw("login_num+1");
  88. $user->save();
  89. return [1,'success',$user->toArray()];
  90. }
  91. /**
  92. * @return Response
  93. */
  94. #[Route(path: "profile",methods: "get"),Middleware(AuthMiddleware::class)]
  95. public function getLoginUser(): Response
  96. {
  97. try {
  98. $userData = (new Auth)->guard("admin")->user()->toArray();
  99. if (isset($userData['password'])) unset($userData['password']);
  100. if (empty($userData['vip_at']))
  101. {
  102. $userData['vip_at'] = 0;
  103. } else {
  104. $userData['vip_at'] = strtotime($userData['vip_at']);
  105. }
  106. return successTrans("success.data",[
  107. "username" => $userData['username'],
  108. "truename" => $userData['truename'],
  109. "vip_at" => $userData['vip_at'],
  110. "super" => $userData['is_super'],
  111. "type" => $userData['type']
  112. ]);
  113. } catch (\Throwable $exception){
  114. return error($exception->getMessage());
  115. }
  116. }
  117. /**
  118. * 发送登录/注册验证码
  119. * @param Request $request
  120. * @return Response
  121. */
  122. #[Route(path: "sms",methods: "post")]
  123. public function getLoginSms(Request $request): Response
  124. {
  125. try {
  126. $param = $this->_valid([
  127. "mobile.require" => trans("empty.mobile"),
  128. "mobile.mobile" => trans("error.mobile"),
  129. "code.require" => trans("empty.code"),
  130. "key.require" => trans("empty.data"),
  131. "scene.require" => trans("empty.data"),
  132. ],"post");
  133. if (!is_array($param)) return error($param);
  134. if (Captcha::check($param['code'],$param['key']) === false) return errorTrans("error.captcha");
  135. [$state,$msg] = (new SmsService)->sendSceneSms($param['mobile'],$param['scene']);
  136. if (!$state) return error($msg);
  137. return success($msg);
  138. } catch (\Throwable $throwable) {
  139. return error($throwable->getMessage());
  140. }
  141. }
  142. }