request->only(['username', 'password'], 'post'); if (empty(trim($params['username'])) || empty(trim($params['password']))) { // 验证数据 return $this->error('用户名和密码不能为空'); } $username = trim($params['username']); $failKey = 'login_fail_' . md5($username); $fails = (int) cache($failKey); // 读取失败次数,并强制转为整数 if ($fails >= 5) { return $this->error('失败次数过多,请 15 分钟后再试', [], 429); } try { $result = $authService->login(trim($params['username']), trim($params['password'])); cache($failKey, null); return $this->success('登录成功', $result); } catch (\Exception $e) { cache($failKey, $fails + 1, 900); // 失败次数存活时间,15分钟之后自动清零 return $this->error($e->getMessage()); } } /* 退出登录(已完成) */ public function logout() { Session::clear(); return $this->success('退出成功'); } }