Member.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. *
  7. * 用户管理 Table<ai_member>
  8. */
  9. namespace app\common\model;
  10. use app\common\model\MemberMiniapp;
  11. use think\Model;
  12. class Member extends Model{
  13. protected $pk = 'id';
  14. /**
  15. * 用户信息关联
  16. * @return void
  17. */
  18. public function miniapp(){
  19. return $this->hasOne('MemberMiniapp','id','bind_member_miniapp_id');
  20. }
  21. /**
  22. * 添加编辑
  23. * @param array $param 数组
  24. */
  25. public static function edit(array $param){
  26. $data['phone_id'] = $param['phone_id'];
  27. $data['username'] = $param['username'];
  28. $data['lock_config'] = $param['lock_config'];
  29. $data['login_ip'] = request()->ip();
  30. $data['login_time'] = time();
  31. $data['update_time'] = time();
  32. if(!empty($param['login_password'])){
  33. $data['password'] = password_hash(md5($param['login_password']),PASSWORD_DEFAULT);
  34. }
  35. if(!empty($param['safe_password'])){
  36. $data['safe_password'] = password_hash(md5($param['safe_password']),PASSWORD_DEFAULT);
  37. }
  38. if(isset($param['id']) && $param['id'] > 0){
  39. return self::where('id',$param['id'])->update($data);
  40. }else{
  41. $data['create_time'] = time();
  42. $data['parent_id'] = 0;
  43. return self::insert($data);
  44. }
  45. }
  46. /**
  47. * 添加编辑
  48. * @param array $param 数组
  49. */
  50. public static function bindEdit(array $param){
  51. $data['phone_id'] = $param['phone_id'];
  52. $data['username'] = $param['username'];
  53. $data['password'] = password_hash(md5($param['login_password']),PASSWORD_DEFAULT);
  54. $data['bind_member_miniapp_id'] = $param['miniapp_id'];
  55. if(isset($param['id']) && $param['id'] > 0){
  56. return self::where('id',$param['id'])->update($data);
  57. }else{
  58. $data['parent_id'] = $param['user_id'];
  59. $data['login_ip'] = request()->ip();
  60. $data['login_time'] = time();
  61. $data['update_time'] = time();
  62. $data['create_time'] = time();
  63. return self::insert($data);
  64. }
  65. }
  66. /**
  67. * 更新用户新的手机号
  68. * @param array $param 数组
  69. */
  70. public static function editPhone(array $param){
  71. $data['phone_id'] = $param['phone_id'];
  72. $data['update_time'] = time();
  73. return self::where('id',$param['id'])->update($data);
  74. }
  75. /**
  76. * 用户注册
  77. * @param array $param 参数
  78. */
  79. public static function reg(array $param){
  80. //判断验证码
  81. $sms['phone_id'] = $param['phone_id'];
  82. $sms['sms_code'] = $param['sms_code'];
  83. $is_sms = widget('common/alisms/isSms',$sms);
  84. if(!$is_sms){
  85. return ['code'=>0,'message'=>"验证码错误"];
  86. }
  87. //判断手机号是否重复
  88. $info = self::where(['phone_id'=>$param['phone_id']])->find();
  89. if(isset($info)){
  90. return ['code'=>0,'message'=>'帐号已被注册'];
  91. }
  92. //验证码通过
  93. $data['phone_id'] = $param['phone_id'];
  94. $data['username'] = $param['username'];
  95. $data['password'] = password_hash(md5($param['login_password']),PASSWORD_DEFAULT);
  96. $data['safe_password'] = password_hash(md5('123456'),PASSWORD_DEFAULT); //设置初始安全密码
  97. $data['login_time'] = time();
  98. $data['login_ip'] = request()->ip();
  99. $data['update_time'] = time();
  100. $data['create_time'] = time();
  101. $last_id = self::insertGetId($data);
  102. if($last_id){
  103. return ['code'=>200,'message'=>'注册成功','data' => ['id' => $last_id]];
  104. }
  105. return ['code'=>0,'message'=>'帐号登录失败'];
  106. }
  107. /**
  108. * 修改我的密码
  109. * @access public
  110. */
  111. public static function upDatePasspowrd(int $uid,string $safepassword){
  112. $data['id'] = $uid;
  113. $data['password'] = password_hash(md5($safepassword),PASSWORD_DEFAULT);
  114. return self::update($data);
  115. }
  116. /**
  117. * 登录用户
  118. * @param array $param 更新的用户信息
  119. */
  120. public static function login(array $param){
  121. $condition['phone_id'] = $param['login_id'];
  122. $condition['is_lock'] = 0;
  123. $result = self::where($condition)->find();
  124. if($result){
  125. if(!password_verify(md5($param['login_password']),$result->getAttr('password'))) {
  126. return FALSE;
  127. }
  128. self::updateLogin($result->getAttr('id'));
  129. return $result;
  130. }
  131. return FALSE;
  132. }
  133. /**
  134. * 用户找回密码
  135. * @param array $param 更新的用户信息
  136. */
  137. public static function getPasspord(array $param){
  138. $condition['phone_id'] = $param['phone_id'];
  139. $condition['is_lock'] = 0;
  140. $info = self::where($condition)->find();
  141. if($info){
  142. $result = self::updateLogin($info->getAttr('id'),$param['login_password']);
  143. return isset($result) ? $info : false;
  144. }
  145. return false;
  146. }
  147. /**
  148. * 验证安全密码
  149. * @param int $user_id 用户ID
  150. * @param string $safepassword 验证的安全密码
  151. */
  152. public static function checkSafePasspord(int $uid,string $safepassword){
  153. $info = self::where(['id' => $uid])->find();
  154. if(password_verify(md5($safepassword),$info->getAttr('safe_password'))) {
  155. return true;
  156. }
  157. return false;
  158. }
  159. /**
  160. * 验证登录密码
  161. * @param int $user_id 用户ID
  162. * @param string $password 验证的安全密码
  163. */
  164. public static function checkPasspord(int $uid,string $password){
  165. $info = self::where(['id' => $uid])->find();
  166. if(password_verify(md5($password),$info->getAttr('password'))) {
  167. return true;
  168. }
  169. return false;
  170. }
  171. /**
  172. * 更新安全密码
  173. * @param array $param 更新的用户信息
  174. */
  175. public static function updateSafePasspord(int $uid,string $safepassword){
  176. $data['id'] = $uid;
  177. $data['safe_password'] = password_hash(md5($safepassword),PASSWORD_DEFAULT);
  178. return self::update($data);
  179. }
  180. /**
  181. * 更新用户登录信息
  182. * @param integer $uid 用户ID
  183. */
  184. protected static function updateLogin($uid,$passpord = null){
  185. $data = [
  186. 'id' => $uid,
  187. 'login_time' => time(),
  188. 'login_ip' => request()->ip()
  189. ];
  190. if(!empty($passpord)){
  191. $data['password'] = password_hash(md5($passpord),PASSWORD_DEFAULT);
  192. }
  193. return self::update($data);
  194. }
  195. /**
  196. * 锁定用户
  197. * @param integer $id
  198. */
  199. public static function lock(int $id){
  200. $result = self::where(['id' => $id])->find();
  201. $result->is_lock = $result->is_lock ? 0 : 1;
  202. if($result->is_lock){
  203. MemberMiniapp::where(['member_id' => $id])->update(['is_lock' => 1]);
  204. }
  205. return $result->save();
  206. }
  207. }