123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- namespace app\controller;
- use app\BaseController;
- use app\model\TokenModel;
- use app\model\UserModel;
- use think\facade\Cache;
- class User extends BaseController
- {
- public function login(): \think\response\Json
- {
- $user = $this->request->post('username', '0');
- $pass = $this->request->post('password', '0');
- $info = UserModel::where("mail", $user)->field('id,mail,password,login_fail_count,login_ip,login_time')->find();
- if (Cache::get('login.' . $user)) {
- return $this->error("账号已被安全锁定,您可以修改密码然后登录");
- }
- if (!$info) {
- return $this->error("账号不存在");
- }
- if ($info['login_fail_count'] == 10) {
- Cache::set('login.' . $user, 'lock', 7200);
- $info->login_fail_count = 0;
- $info->save();
- return $this->error("账号已被锁定2小时");
- }
- if ($info['password'] != md5($pass)) {
- $info->login_fail_count += 1;
- $info->save();
- return $this->error("账号不存在或密码错误");
- }
- $token = renderToken($user);
- $agent = $this->request->header("User-Agent");
- $agent = mb_substr($agent, 0, 250);
- $auth = ["user_id" => $info['id'], 'token' => $token, 'create_time' => time(), 'ip' => getRealIp(), 'user_agent' => $agent];
- $add = TokenModel::insert($auth);
- unset($auth['user_agent']);
- unset($auth['ip']);
- $info->login_ip = getRealIp();
- $info->login_time = date("Y-m-d H:i:s");
- $info->login_fail_count = 0;//登陆成功将失败次数归零
- $info->save();
- return $this->success("登录成功", $auth);
- }
- function register(): \think\response\Json
- {
- $user = $this->request->post('username', false);
- $pass = $this->request->post('password', false);
- $code = $this->request->post('code', '0000');
- if ($user && $pass) {
- if (!validateEmail($user)) {
- return $this->error("邮箱格式错误");
- }
- if (strlen($pass) < 6) {
- return $this->error("密码过短");
- }
- $cacheCode = Cache::get("code" . $user);
- if (!$cacheCode || $cacheCode != $code) {
- return $this->error('验证码错误');
- }
- if (UserModel::where("mail", $user)->field("id,mail")->find()) {
- return $this->error("账号已存在");
- }
- $add = UserModel::insert(["mail" => $user, "password" => md5($pass), "create_time" => date('Y-m-d H:i:s'), 'register_ip' => getRealIp()]);
- if ($add) {
- Cache::delete("code" . $user);
- return $this->success("ok");
- }
- }
- return $this->error('注册失败');
- }
- public function forgetPass(): \think\response\Json
- {
- $user = $this->request->post('username', false);
- $pass = $this->request->post('password', false);
- $code = $this->request->post('code', '0000');
- if ($user && $pass) {
- if (!validateEmail($user)) {
- return $this->error("邮箱格式错误");
- }
- if (strlen($pass) < 6) {
- return $this->error("密码过短");
- }
- $info = UserModel::where("mail", $user)->field("id,mail")->find();
- if (!$info) {
- return $this->error("账号不存在");
- }
- $cacheCode = Cache::get("code" . $user);
- if ($cacheCode && $cacheCode == $code) {
- $info->password = md5($pass);
- $add = $info->save();
- if ($add) {
- TokenModel::where("user_id", $info['id'])->delete(); //删除所有登录记录
- Cache::delete('login.' . $user);
- return $this->success("ok");
- }
- } else {
- return $this->error('验证码错误');
- }
- }
- return $this->error('修改失败');
- }
- function loginOut(): \think\response\Json
- {
- $user = $this->getUser();
- if ($user) {
- TokenModel::where("user_id", $user['user_id'])->where('token', $user['token'])->delete();
- }
- return $this->success('ok');
- }
- public function get(): \think\response\Json
- {
- $info = $this->getUser(true);
- if ($info) {
- $info = UserModel::field('id,mail,manager')->find($info['user_id']);
- return $this->success('ok', $info);
- }
- return $this->error('获取失败');
- }
- }
|