开启插件
//路径config/plugin.js
//npm instll egg-jwt
module.exports = {
jwt: {
enable: true,
package: 'egg-jwt',
}
}
//配置 - congif/config.default.js
config.jwt = {
secret: 'eggjwt',
};
登录接口生成并返回token
const token = app.jwt.sign({
id,
account,
}, app.config.jwt.secret, { expiresIn: '1800s' });
启用jwt
//app/router.js
//引入
const { router, controller, jwt} = app;
router.get('/api', jwt, controller.api )
router.resources('api', '/api', jwt, controller.api);
上面那个是相当于egg自身的鉴权,经测试没token是没返回401的,需要自己创建一个中间件;
// 路径app/middleware/jwt.js, 没文件夹自行创建
module.exports = () => {
return async function jwt(ctx, next) {
const token = ctx.request.header.authorization;
if (token) {
// const decode = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret);
await next();
} else {
ctx.body = {
code: 401,
message: '非法操作',
};
return;
}
};
};
引入中间件
// router.js
const { router, controller, middleware } = app;
router.get('/api', middleware.jwt(), controller.api )
router.resources('api', '/api', middleware.jwt(), controller.api);
这样就可以自定义了;