LoginController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2020-09-07
  6. * Time: 11:39
  7. */
  8. namespace api\js\controller;
  9. use api\js\model\UserModel;
  10. use cmf\controller\RestBaseController;
  11. use think\Db;
  12. class LoginController extends RestBaseController
  13. {
  14. /**
  15. * 账号登录
  16. */
  17. public function login()
  18. {
  19. $validate = new \think\Validate([
  20. 'mobile' => 'require',
  21. 'password' => 'require'
  22. ]);
  23. $validate->message([
  24. 'mobile.require' => '请输入您的手机号',
  25. 'password.require' => '请输入您的密码!'
  26. ]);
  27. $data = $this->request->param();
  28. if (!$validate->check($data)) {
  29. $this->error($validate->getError());
  30. }
  31. $type = $data['type'];
  32. unset($data['type']);
  33. $findUserWhere = [];
  34. if (cmf_check_mobile($data['mobile'])) {
  35. $findUserWhere['mobile'] = $data['mobile'];
  36. } else {
  37. $this->error('手机号格式错误');
  38. }
  39. if ($type == 1) {
  40. $findUserWhere['user_type'] = 2;
  41. }
  42. if ($type == 2) {
  43. $findUserWhere['user_type'] = 3;
  44. }
  45. $findUser = UserModel::name("user")->where($findUserWhere)->find();
  46. if (empty($findUser)) {
  47. $this->error("用户不存在!");
  48. } else {
  49. switch ($findUser['user_status']) {
  50. case 0:
  51. $this->error('您的账户已停用!');
  52. case 2:
  53. $this->error('账户还没有验证成功!');
  54. }
  55. if (!cmf_compare_password($data['password'], $findUser['user_pass'])) {
  56. $this->error("密码不正确!");
  57. }
  58. }
  59. if (empty($this->deviceType) && (empty($data['device_type']) || !in_array($data['device_type'], $this->allowedDeviceTypes))) {
  60. $this->error("请求错误,未知设备!");
  61. } else if (!empty($data['device_type'])) {
  62. $this->deviceType = $data['device_type'];
  63. }
  64. $findUserToken = Db::name("user_token")
  65. ->where('user_id', $findUser['id'])
  66. ->where('device_type', $this->deviceType)
  67. ->find();
  68. $currentTime = time();
  69. $expireTime = $currentTime + 24 * 3600 * 180;
  70. $token = md5(uniqid()) . md5(uniqid());
  71. if (empty($findUserToken)) {
  72. $result = Db::name("user_token")->insert([
  73. 'token' => $token,
  74. 'user_id' => $findUser['id'],
  75. 'expire_time' => $expireTime,
  76. 'create_time' => $currentTime,
  77. 'device_type' => $this->deviceType
  78. ]);
  79. } else {
  80. $result = Db::name("user_token")
  81. ->where('user_id', $findUser['id'])
  82. ->where('device_type', $this->deviceType)
  83. ->update([
  84. 'token' => $token,
  85. 'expire_time' => $expireTime,
  86. 'create_time' => $currentTime
  87. ]);
  88. }
  89. if (empty($result)) {
  90. $this->error("登录失败!");
  91. }
  92. Db::name('user')->where('id', $findUser['id'])->update(['last_login_ip' => get_client_ip(), 'last_login_time' => time()]);
  93. unset($findUser['user_pass']);
  94. $this->success("登录成功!", ['token' => $token, 'id' => $findUser['id']]);
  95. }
  96. public function wechatLogin()
  97. {
  98. $validate = new \think\Validate(['openid' => 'require']);
  99. $validate->message(['openid' => '微信授权失败!']);
  100. $data = $this->request->param();
  101. if (!$validate->check($data)) $this->error($validate->getError());
  102. $findUserWhere = [];
  103. if ($data['type'] == 1) $findUserWhere['user_type'] = 2;
  104. else if ($data['type'] == 2) $findUserWhere['user_type'] = 3;
  105. $findUser = UserModel::name("user")->where('user_type', $findUserWhere['user_type'])
  106. ->where('openid', $data['openid'])->find();
  107. if (empty($findUser)) $this->error("用户不存在!");
  108. else {
  109. switch ($findUser['user_status']) {
  110. case 0:
  111. $this->error('您的账户已停用!');
  112. case 2:
  113. $this->error('账户还没有验证成功!');
  114. }
  115. }
  116. if (empty($this->deviceType) && (empty($data['device_type']) || !in_array($data['device_type'], $this->allowedDeviceTypes))) {
  117. $this->error("请求错误,未知设备!");
  118. } else if (!empty($data['device_type'])) {
  119. $this->deviceType = $data['device_type'];
  120. }
  121. $findUserToken = Db::name("user_token")
  122. ->where('user_id', $findUser['id'])
  123. ->where('device_type', $this->deviceType)
  124. ->find();
  125. $currentTime = time();
  126. $expireTime = $currentTime + 24 * 3600 * 180;
  127. $token = md5(uniqid()) . md5(uniqid());
  128. if (empty($findUserToken)) {
  129. $result = Db::name("user_token")->insert([
  130. 'token' => $token,
  131. 'user_id' => $findUser['id'],
  132. 'expire_time' => $expireTime,
  133. 'create_time' => $currentTime,
  134. 'device_type' => $this->deviceType
  135. ]);
  136. } else {
  137. $result = Db::name("user_token")
  138. ->where('user_id', $findUser['id'])
  139. ->where('device_type', $this->deviceType)
  140. ->update([
  141. 'token' => $token,
  142. 'expire_time' => $expireTime,
  143. 'create_time' => $currentTime
  144. ]);
  145. }
  146. if (empty($result)) {
  147. $this->error("登录失败!");
  148. }
  149. Db::name('user')->where('id', $findUser['id'])->update(['last_login_ip' => get_client_ip(), 'last_login_time' => time()]);
  150. $this->success("登录成功!", ['token' => $token, 'id' => $findUser['id']]);
  151. }
  152. }