官网 https://www.npmjs.com/package/egg-jwt
下载安装
or
配置
1 2 3 4 5 6 7 8 9 10
| exports.jwt = { enable: true, package: "egg-jwt" };
exports.jwt = { secret: '1234567' };
|
生成token
1 2 3 4
| async getToken(value) { return this.app.jwt.sign(value, this.config.jwt.secret); }
|
验证token
1 2 3 4 5 6
| try { user = app.jwt.verify(token, app.config.jwt.secret) } catch (err) { let fail = err.name === 'TokenExpiredError' ? 'token 已过期! 请重新获取令牌' : 'Token 令牌不合法!'; return ctx.apiFail(fail); }
|
封装成中间件判断每次接口授权
middleware目录下新建auth.js文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| module.exports = (option, app) => { return async (ctx, next) => { const { token } = ctx.header; if (!token) { ctx.throw(200, '您没有权限访问该接口!'); } let user = {}; try { user = ctx.checkToken(token); } catch (error) { let fail = error.name === 'TokenExpiredError' ? 'token 已过期! 请重新获取令牌' : 'Token 令牌不合法!'; ctx.throw(200, fail); } let t = await ctx.service.cache.get('user_' + user.id); if (!t || t !== token) { ctx.throw(200, 'Token 令牌不合法!'); }
user = await app.model.User.findByPk(user.id); if (!user || user.status == 0) { ctx.throw(200, '用户不存在或已被禁用'); } ctx.authUser = user;
await next(); } }
|