Commit 7a4c6023 authored by Junling Bu's avatar Junling Bu
Browse files

chore[litemall-admin, litemall-admin-api]: 管理后台API调整及文档

parent fc3886ff
...@@ -61,11 +61,10 @@ ...@@ -61,11 +61,10 @@
sort: 排序字段 sort: 排序字段
order: 升序降序 order: 升序降序
* page, 和通常计算机概念中数组下标从0开始不同,这里的page参数应该从1开始, * page, 和通常计算机概念中数组下标从0开始不同,这里的page参数应该从1开始,1即代表第一页数据;
1即代表第一页数据. * limit, 分页大小;
* limit * sort, 例如"add_time"或者"id";
* sort, 例如'add_time'或者'id'. * order, 只能是"desc"或者"asc"。
* order, 只能是"desc"或者'asc'.
此外,这里四个参数是可选的,后端应该设置默认参数,因此即使前端不设置, 此外,这里四个参数是可选的,后端应该设置默认参数,因此即使前端不设置,
后端也会自动返回合适的对象数组响应数据。 后端也会自动返回合适的对象数组响应数据。
...@@ -93,7 +92,7 @@ ...@@ -93,7 +92,7 @@
{ {
errno: xxx, errno: xxx,
errmsg: xxx, errmsg: xxx,
data: {} data: {}
} }
...@@ -111,14 +110,14 @@ ...@@ -111,14 +110,14 @@
{ {
errno: 0, errno: 0,
errmsg: "成功", errmsg: "成功",
} }
#### 1.2.3 普通对象 #### 1.2.3 普通对象
{ {
errno: 0, errno: 0,
errmsg: "成功", errmsg: "成功",
data: {} data: {}
} }
...@@ -126,10 +125,13 @@ ...@@ -126,10 +125,13 @@
{ {
errno: 0, errno: 0,
errmsg: "成功", errmsg: "成功",
data: { data: {
list: [], list: [],
total: XX total: XX,
page: XX,
limit: XX,
pages: XX
} }
} }
...@@ -209,41 +211,79 @@ list是对象数组,total是总的数量。 ...@@ -209,41 +211,79 @@ list是对象数组,total是总的数量。
#### 1.4.1 Header&Token #### 1.4.1 Header&Token
1. 前端访问商场登录API`/wx/auth/login`或者管理后台登录API`/admin/auth/login` 前后端Token交换流程如下:
1. 前端访问商场登录API或者管理后台登录API;
2. 成功以后,前端会接收后端响应的一个token,保存在本地;
3. 请求受保护API则,则采用自定义头部携带此token
4. 后端检验Token,成功则返回受保护的数据。
#### 1.4.2 商场自定义Header
访问受保护商场API采用自定义`X-Litemall-Token`头部
1. 小商城(或轻商场)前端访问小商城后端登录API`/wx/auth/login`
POST /wx/auth/login POST /wx/auth/login
{ {
"username": "user123", "username": "user123",
"password': "user123' "password": "user123"
} }
2. 成功以后,前端会接收后端响应的一个token, 2. 成功以后,前端会接收后端响应的一个token,
{ {
"errno": 0, "errno": 0,
"data": { "data": {
"userInfo": { "userInfo": {
"nickName": "user123", "nickName": "user123",
"avatarUrl": "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif" "avatarUrl": "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
}, },
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0aGlzIGlzIGxpdGVtYWxsIHRva2VuIiwiYXVkIjoiTUlOSUFQUCIsImlzcyI6IkxJVEVNQUxMIiwiZXhwIjoxNTU3MzI2ODUwLCJ1c2VySWQiOjEsImlhdCI6MTU1NzMxOTY1MH0.XP0TuhupV_ttQsCr1KTaPZVlTbVzVOcnq_K0kXdbri0" "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0aGlzIGlzIGxpdGVtYWxsIHRva2VuIiwiYXVkIjoiTUlOSUFQUCIsImlzcyI6IkxJVEVNQUxMIiwiZXhwIjoxNTU3MzI2ODUwLCJ1c2VySWQiOjEsImlhdCI6MTU1NzMxOTY1MH0.XP0TuhupV_ttQsCr1KTaPZVlTbVzVOcnq_K0kXdbri0"
}, },
"errmsg": "成功" "errmsg": "成功"
} }
3. 请求受保护API则,则采用自定义头部携带此token 3. 请求受保护API则,则采用自定义头部携带此token
GET http://localhost:8080/wx/address/list GET http://localhost:8080/wx/address/list
X-Litemall-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0aGlzIGlzIGxpdGVtYWxsIHRva2VuIiwiYXVkIjoiTUlOSUFQUCIsImlzcyI6IkxJVEVNQUxMIiwiZXhwIjoxNTU3MzM2ODU0LCJ1c2VySWQiOjIsImlhdCI6MTU1NzMyOTY1NH0.JY1-cqOnmi-CVjFohZMqK2iAdAH4O6CKj0Cqd5tMF3M X-Litemall-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0aGlzIGlzIGxpdGVtYWxsIHRva2VuIiwiYXVkIjoiTUlOSUFQUCIsImlzcyI6IkxJVEVNQUxMIiwiZXhwIjoxNTU3MzM2ODU0LCJ1c2VySWQiOjIsImlhdCI6MTU1NzMyOTY1NH0.JY1-cqOnmi-CVjFohZMqK2iAdAH4O6CKj0Cqd5tMF3M
#### 1.4.2 商场Header #### 1.4.3 管理后台自定义Header
访问受保护商场API采用自定义`X-Litemall-Token`头部 访问受保护管理后台API则是自定义`X-Litemall-Admin-Token`头部
#### 1.4.3 管理后台Header 1. 管理后台前端访问管理后台后端登录API`/admin/auth/login`
访问受保护管理后台API则是自定义`X-Litemall-Admin-Token`头部。 POST /admin/auth/login
{
"username": "admin123",
"password": "admin123"
}
2. 成功以后,管理后台前端会接收后端响应的一个token,
{
"errno": 0,
"data": {
"adminInfo": {
"nickName": "admin123",
"avatar": "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
},
"token": "f2dbcae8-6e25-4f8e-bc58-aa81d512c952"
},
"errmsg": "成功"
}
3. 请求受保护API时,则采用自定义头部携带此token
GET http://localhost:8080/wx/address/list
X-Litemall-Admin-Token: f2dbcae8-6e25-4f8e-bc58-aa81d512c952
### 1.5 版本控制 ### 1.5 版本控制
...@@ -432,7 +472,42 @@ API应该存在版本控制,以保证兼容性。 ...@@ -432,7 +472,42 @@ API应该存在版本控制,以保证兼容性。
应用场景 应用场景
账号登录 基于用户名和密码的账号登录
接口链接
POST /wx/auth/login
请求参数
{
"username": "user123",
"password": "user123"
}
响应内容
{
"errno": 0,
"data": {
"userInfo": {
"nickName": "user123",
"avatarUrl": "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0aGlzIGlzIGxpdGVtYWxsIHRva2VuIiwiYXVkIjoiTUlOSUFQUCIsImlzcyI6IkxJVEVNQUxMIiwiZXhwIjoxNTU3MzI2ODUwLCJ1c2VySWQiOjEsImlhdCI6MTU1NzMxOTY1MH0.XP0TuhupV_ttQsCr1KTaPZVlTbVzVOcnq_K0kXdbri0"
},
"errmsg": "成功"
}
错误码
#### 2.1.3 注册
应用场景
xxx
接口链接 接口链接
...@@ -450,22 +525,204 @@ API应该存在版本控制,以保证兼容性。 ...@@ -450,22 +525,204 @@ API应该存在版本控制,以保证兼容性。
xxx xxx
#### 2.1.3 注册
#### 2.1.4 退出 #### 2.1.4 退出
应用场景
账号退出
接口链接
POST /wx/auth/logout
请求参数
{
"username": "user123",
"password": "user123"
}
响应内容
{
"errno": 0,
"errmsg": "成功"
}
错误码
#### 2.1.5 注册验证码 #### 2.1.5 注册验证码
#### 2.1.6 验证码 应用场景
用户未登录情况下,请求后端发送注册验证码用于注册。
接口链接
xxx
请求参数
xxx
响应内容
xxx
错误码
xxx
#### 2.1.6 操作验证码
应用场景
用户已登录情况下,请求后端发送操作验证码用于相关操作。
接口链接
xxx
请求参数
xxx
响应内容
xxx
错误码
xxx
#### 2.1.7 账号密码修改 #### 2.1.7 账号密码修改
应用场景
账号密码修改
接口链接
xxx
请求参数
xxx
响应内容
xxx
错误码
xxx
#### 2.1.8 微信手机号码绑定 #### 2.1.8 微信手机号码绑定
应用场景
微信手机号码绑定,仅用于小程序环境。
接口链接
xxx
请求参数
xxx
响应内容
xxx
错误码
xxx
#### 2.1.9 手机号码修改 #### 2.1.9 手机号码修改
#### 2.1.10 账号信息修改 应用场景
手机号码修改
接口链接
xxx
请求参数
xxx
响应内容
xxx
错误码
xxx
#### 2.1.10 账号信息
应用场景
账号信息
接口链接
GET /wx/auth/info
请求参数
响应内容
{
"errno": 0,
"data": {
"gender": 1,
"nickName": "user123",
"mobile": "",
"avatar": "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
},
"errmsg": "成功"
}
错误码
#### 2.1.11 账号信息更新
应用场景
账号信息更新。
接口链接
POST /wx/auth/profile
请求参数
{
"gender": 1,
"nickName": "user123",
"avatar": "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
}
响应内容
{
"errno": 0,
"errmsg": "成功"
}
错误码
### 2.2 首页服务 ### 2.2 首页服务
#### 2.2.1 首页数据 #### 2.2.1 首页数据
......
...@@ -82,7 +82,16 @@ public class AdminAuthController { ...@@ -82,7 +82,16 @@ public class AdminAuthController {
adminService.updateById(admin); adminService.updateById(admin);
logHelper.logAuthSucceed("登录"); logHelper.logAuthSucceed("登录");
return ResponseUtil.ok(currentUser.getSession().getId());
// userInfo
Map<String, Object> adminInfo = new HashMap<String, Object>();
adminInfo.put("nickName", admin.getUsername());
adminInfo.put("avatar", admin.getAvatar());
Map<Object, Object> result = new HashMap<Object, Object>();
result.put("token", currentUser.getSession().getId());
result.put("adminInfo", adminInfo);
return ResponseUtil.ok(result);
} }
/* /*
......
...@@ -53,7 +53,7 @@ const user = { ...@@ -53,7 +53,7 @@ const user = {
const username = userInfo.username.trim() const username = userInfo.username.trim()
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
loginByUsername(username, userInfo.password).then(response => { loginByUsername(username, userInfo.password).then(response => {
const token = response.data.data const token = response.data.data.token
commit('SET_TOKEN', token) commit('SET_TOKEN', token)
setToken(token) setToken(token)
resolve() resolve()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment