1、新建更新用户信息的路由
'use strict'; /** * @param {Egg.Application} app - egg application */ module.exports = app => { const { router, controller, middleware } = app; // 传入加密字符串 const verify_token = middleware.verifyToken(app.config.jwt.secret); // 注册路由 router.post('/api/user/register', controller.user.register); // 登录路由 router.post('/api/user/login', controller.user.login); // 测试 token 解析 router.get('/api/user/token', verify_token, controller.user.getTokenInfo); // 获取用户信息 router.get('/api/user/getUserInfo', verify_token, controller.user.getUserInfo); // 修改用户信息 router.post('/api/user/updateUserInfo', verify_token, controller.user.updateUserInfo); };
2、实现更新用户 updateUserInfo 接口
- 通过 post 请求,在请求体中获取签名字段 signature
- 用 app.jwt.verify(token, app.config.jwt.secret),解析出 token 的值
- 校验是否 token 可以,需要在鉴权中间件里加返回
- 根据用户名,在数据库查找相对应的id操作
- 通过 service 方法 updateUserInfo 修改 signature 信息
在 /controller/user.js
添加,更新用户信息的方法
// 更新用户信息 async updateUserInfo() { try { const { ctx, app } = this; // 0、获取用户输入的 signature const { signature } = ctx.request.body; // 1、获取请求头 authorization 属性,值为 token const token = ctx.request.header.authorization; // 2、用 app.jwt.verify(token, app.config.jwt.secret),解析出 token 的值 const decode = await app.jwt.verify(token, app.config.jwt.secret); // 3、校验是否 token 可以,需要在鉴权中间件里加返回 if(!decode) return; // 4、根据用户名,在数据库查找相对应的id操作 const userInfo = await ctx.service.user.getUserByName(decode.username); // 5、通过 service 方法 updateUserInfo 修改 signature 信息 const result = await ctx.service.user.updateUserInfo({ ...userInfo, signature }); // 返回 token ctx.body = { status: 200, desc: '更新成功', data: { id: userInfo.id, username: userInfo.username, signature } }; } catch (error) { ctx.body = { status: 500, desc: '更新失败', data: null } } }
在 /service/user.js
添加,更新用户数据库数据的方法
// 更新用户信息 async updateUserInfo(params) { const { app } = this; try { // 通过 app.mysql.update 方法更新 user 表, 通过 id 筛选用户 const result = await app.mysql.update('user', { ...params }, { id: params.id } ); return result; } catch(error) { console.log(error); return null; } }
3、测试更新用户信息接口
- 登录生成 token
- 在测试接口请求头带上 token 获取数据
- 在测试接口请求体添加个性签名的数据
先新建接口保存
然后登录拿到 token 运行,修改个性签名信息