diff --git a/GinSkeleton/api_doc.md b/GinSkeleton/api_doc.md
index b661a6a..af4a9d2 100644
--- a/GinSkeleton/api_doc.md
+++ b/GinSkeleton/api_doc.md
@@ -1,13 +1,186 @@
-## 获取公钥
-/admin/users/publickey
-参数字段|参数属性|类型|选项|
+### 验证码
+无需校验参数
+##### 获取验证码
+> *GET*,/captcha
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": {
+ "id": "ECAZBGqD6ORferpWPx9y",
+ "img_url": "/captcha/ECAZBGqD6ORferpWPx9y.png",// 验证码图片地址
+ "refresh": "/captcha/ECAZBGqD6ORferpWPx9y.png?reload=1",
+ "verify": "/captcha/ECAZBGqD6ORferpWPx9y/这里替换为正确的验证码进行验证"
+ },
+ "msg": "验证码信息"
+}
+```
+#### 验证验证码
+> *GET*,/captcha/:captcha_id/:captcha_value
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": "",
+ "msg": "验证码校验通过"
+}
+```
+
+## 用户相关
+### 无需鉴权
+#### 获取公钥
+> *POST*,/admin/users/publickey
+参数字段|参数属性|类型|选项
+---|---|---|---|---
+user_name|form-data|string|必填
+> 返回示例:
+```
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw/GsJEfppPkaZXGt7uKr
+q2UOsCEzrtPYz/DDUCjJzWnr725FoNqT77B33QbET995hay8j8Bcwwj7APkUYKyt
+RoNUOJkaWgAqpNp9/TKhulFex8ycEaI1lG0kzqPQtcNjIQyqOQ1qSyXb8BxFFN5+
+zvuWdpb4lI8YxZGg9+n77qtmr2an7d4ADIsRVAejJuoDWB56RovVuiLihG71Wfam
+V1HhGf0ykWfyamd1HxN74hdBICbpChWPCmD/S2MwBMViM+TfCu5D15DxP5ZkADLU
+vV81YIKBLg6KZUV7N7oZzzJqiEmpeis4QO4ABf/KRQ9KVRe4dcJFi4E0uVCBKGm8
+1QIDAQAB
+-----END PUBLIC KEY-----
+```
+> 加密参考 */test/login_test.html*
+> 用户发送密码必须通过加密,否则会产生错误
+```javascript
+const response = await fetch('http://localhost:14514/admin/users/publickey?user_name=joefalmko',{
+ method: 'POST',
+});
+const publicKey = await response.text();
+console.log("public key:\n",publicKey);
+
+// Encrypt the password using the public key
+const encrypt = new JSEncrypt();
+encrypt.setPublicKey(publicKey);
+const encryptedPassword = encrypt.encrypt(password);
+console.log("encrypted password: ",encryptedPassword);
+```
+#### 用户注册
+> *POST*,/admin/users/register
+参数字段|参数属性|类型|选项
+---|---|---|---|---
+user_name|form-data|string|必填
+pass|form-data|string|必填
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": "",
+ "msg": "Success"
+}
+```
+#### 用户登录
+> *POST*,/admin/users/login
+参数字段|参数属性|类型|选项
+---|---|---|---|---
+user_name|form-data|string|必填
+pass|form-data|string|必填
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": {
+ "userId":5
+ "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo1LCJ1c2VyX25hbWUiOiJqb2VmYWxta28iLCJwaG9uZSI6IiIsImV4cCI6MTczMDA1OTQxMSwibmJmIjoxNzMwMDMwNjAxfQ.tqxCyPGQYPpTUJBoqZ47sfCAdxEN2thKRBPHilWHl18",
+ "updated_at":"2024-10-27 20:03:31",
+ "msg": "Success"
+ }
+}
+```
+### 需要鉴权
+Header中必须包含 "Authorization": "Bearer {token}"
+#### 获取用户信息
+> *POST*,/admin/users/info
+参数字段|参数属性|类型|选项
+---|---|---|---|---
user_name|form-data|string|必填
> 返回示例:
```json
{
"code": 200,
"data": {
- "PublicKey": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFrZUx2RWNpS3o5UytUQ3E1VnE5MQpTU2RaNm55d3VzbHNPRzAzZnY1VXMxVzJTR0ZDVnpTY3N6aWlLYlIrQk9FR3JsSVRQN29Yb2w3enhQUm55eTczCkZjTkRDOHQwQlhxcGR0U3pkL3V1N1JndXpDYW5BYXVaRXh4RERLUmZEV0MrR0p4TUlBaUV0VHJwT1d6dWp1azgKbDdDMWprTlRhQUpBMmx6ODA2ZWNHZ1NIcFg4MHhCZUpwV3lERnF2N3J3eS9EWjhaekQvRTNXa2ZLREUvRzFFTApPNWRBWUg0QXoxcVQ3SHFEY0hpVVlrNGFDWUswb1pJSC9hSXlKRjhnMDVIbER6NUN2eXNXZVZCTWljT0VRaXQxCnJMaDRaWVhqSVAyVEZmYU5hTlpuVVdhR1BCc05VRThjRU92MlA1d3ZHazFGL29yQ0NyNlFQRytBVE00SU1EME4KR3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg=="
+ "id": 1,
+ "user_name": "joefalmko",
+ },
+ "msg": "Success"
+}
+```
+#### 更新用户名
+> *POST*,/admin/users/username
+参数字段|参数属性|类型|选项
+---|---|---|---|---
+user_name|form-data|string|必填
+id|form-data|int|必填
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": "",
+ "msg": "Success"
+}
+```
+#### 更新密码
+> *POST*,/admin/users/password
+参数字段|参数属性|类型|选项
+---|---|---|---|---
+user_name|form-data|string|必填
+id|form-data|int|必填
+oldpass|form-data|string|必填
+newpass|form-data|string|必填
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": "",
+ "msg": "Success"
+}
+```
+#### 注销用户
+> *POST*,/admin/users/delete
+参数字段|参数属性|类型|选项
+---|---|---|---|---
+user_name|form-data|string|必填
+id|form-data|int|必填
+pass|form-data|string|必填
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": "",
+ "msg": "Success"
+}
+```
+#### 登出用户
+> *POST*,/admin/users/logout
+参数字段|参数属性|类型|选项
+---|---|---|---|---
+id|form-data|int|必填
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": "",
+ "msg": "Success"
+}
+```
+#### token刷新 ,请将旧token放置在header头参数直接提交更新
+> *post*,/admin/users/refreshtoken
+
+参数字段|参数属性|类型|选项|默认值
+---|---|---|---|---
+Authorization|Headers|string|必填|Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjQ3LCJ1c2VyX25hbWUiOiJnb3NrZWxldG9uMS40IiwicGhvbmUiOiIiLCJleHAiOjE2MDQwNTIxNzMsIm5iZiI6MTYwNDA0ODU2M30.YNhN9_QasHc5XILQiilZvhxpPDnmC_j82y4JfYPnI7A
+
+> 返回示例:
+```json
+{
+ "code": 200,
+ "data": {
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjQ3LCJ1c2VyX25hbWUiOiJnb3NrZWxldG9uMS40IiwicGhvbmUiOiIiLCJleHAiOjE2MDQwNTYxMDcsIm5iZiI6MTYwNDA0ODU2M30.JPE6G-9YE9UTdxHiWuvdVlD-akiIkvp6Ezf9y4_ud9M"
},
"msg": "Success"
}
diff --git a/GinSkeleton/app/http/controller/web/users_controller.go b/GinSkeleton/app/http/controller/web/users_controller.go
index 3230050..1abbee7 100644
--- a/GinSkeleton/app/http/controller/web/users_controller.go
+++ b/GinSkeleton/app/http/controller/web/users_controller.go
@@ -50,7 +50,7 @@ func (u *Users) Login(c *gin.Context) {
if userToken, err := userTokenFactory.GenerateToken( userModel.Id,userName, variable.ConfigYml.GetInt64("Token.JwtTokenCreatedExpireAt")); err == nil {
if userTokenFactory.RecordLoginToken(userModel.Id,userToken) { // 记录用户登录记录,不必要,但会将token存入Redis,懒得改了
data := gin.H{
- // "userId": userModel.Id,
+ "userId": userModel.Id,
// "user_name": userName,
// "realName": userModel.RealName,
// "phone": phone,