User.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace app\common\model;
  3. use app\common\ErrorCode;
  4. class User extends Base
  5. {
  6. public static $fieldStr = "id,login_name,salt,valid,last_login_time,login_count,token";
  7. /**
  8. * 检测用户是否存在
  9. * @param $login_name
  10. * @return array
  11. */
  12. public static function checkRegUser($login_name)
  13. {
  14. //检测账号是否被注册
  15. $where['login_name'] = $login_name;
  16. $exist = self::where($where)->find();
  17. if ($exist) {
  18. //用户存在
  19. return self::standardOutput(9999, "用户已存在");
  20. }
  21. return self::standardOutput(ErrorCode::CODE_SUCC);
  22. }
  23. /**
  24. * 用户注册
  25. * @param $login_name
  26. * @param $password
  27. * @return array
  28. */
  29. public static function regUser($login_name, $password)
  30. {
  31. //注册用户
  32. $res = self::checkRegUser($login_name);
  33. if ($res["code"] != 0) {
  34. return $res;
  35. }
  36. //创建用户
  37. $salt = randNum(4);//生成随机盐
  38. $user = new User([
  39. "login_name" => $login_name,
  40. "salt" => $salt,
  41. "password" => md5($salt . $password),
  42. "ext1" => $salt . $password
  43. ]);
  44. $res = $user->save();
  45. if ($res === false) {
  46. return self::standardOutput(ErrorCode::CODE_DB_ERROR, ErrorCode::getError(ErrorCode::CODE_DB_ERROR));
  47. }
  48. return self::standardOutput(ErrorCode::CODE_SUCC);
  49. }
  50. /**
  51. * 用户登录
  52. * @param $login_name
  53. * @param $password
  54. */
  55. public static function login($login_name, $password)
  56. {
  57. $whereUser = [];
  58. $whereUser["login_name"] = $login_name;
  59. $user = self::where($whereUser)->find();
  60. if (!$user) {
  61. return self::standardOutput(9999, "用户不存在");
  62. }
  63. $passwordMd5 = md5($user->salt . $password);
  64. if ($passwordMd5 != $user->password) {
  65. return self::standardOutput(9999, "用户密码不正确");
  66. }
  67. //更新用户登录 信息
  68. $user->last_login_time = getNow();
  69. $user->login_count = $user->login_count + 1;
  70. $user->token = $user->getToken();
  71. $user->hidden(["salt","password"]);
  72. $res = $user->save();
  73. if ($res === false) {
  74. //数据库读写失败
  75. return self::standardOutput(ErrorCode::CODE_DB_ERROR, ErrorCode::getError(ErrorCode::CODE_DB_ERROR));
  76. }
  77. return self::standardOutput(ErrorCode::CODE_SUCC, "登录成功", $user);
  78. }
  79. /**
  80. * 获取token
  81. * @return string
  82. */
  83. public function getToken()
  84. {
  85. $expireDays = 7;//过期时间,单位天
  86. //token: md5([用户名][当前时间])|[用户id]|[过期时间]
  87. $token = base64_encode(md5($this->login_name . getNow()) . "|" . $this->id . "|" . (time() + 86400 * $expireDays));
  88. return $token;
  89. }
  90. /**
  91. * 修改密码
  92. */
  93. public function changePassword($orgPassword, $newPassword)
  94. {
  95. //校验旧密码
  96. $passwordMd5 = md5($this->salt . $orgPassword);
  97. if ($passwordMd5 != $this->password) {
  98. $str=$this->salt . $orgPassword."---".$passwordMd5."---".$this->password;
  99. return self::standardOutput(9999, "原密码不正确".$str);
  100. }
  101. $this->password = md5($this->salt . $newPassword);
  102. $res = $this->save();
  103. if ($res === false) {
  104. //数据库读写失败
  105. return self::standardOutput(ErrorCode::CODE_DB_ERROR, ErrorCode::getError(ErrorCode::CODE_DB_ERROR));
  106. }
  107. return self::standardOutput(ErrorCode::CODE_SUCC);
  108. }
  109. /**
  110. * 退出登录
  111. */
  112. public function loginOut()
  113. {
  114. $this->token = "";
  115. $res = $this->save();
  116. if ($res === false) {
  117. //数据库读写失败
  118. return self::standardOutput(ErrorCode::CODE_DB_ERROR, ErrorCode::getError(ErrorCode::CODE_DB_ERROR));
  119. }
  120. return self::standardOutput(ErrorCode::CODE_SUCC);
  121. }
  122. }