这里写目录标题
1、安装egg
mkdir egg-example && cd egg-example
npm init egg --type=simple
npm i
2、安装egg-jwt
npm i egg-jwt --save
3、配置plugin.js
exports.jwt = {
enable: true,
package: 'egg-jwt',
};
4、配置config.default.js
config.jwt = {
secret: '123456', //自定义token的加密条件字符串,可按各自的需求填写
};
5、路由代码app/router.js:
'use strict';
/**
* @param {Egg.Application} app - egg application
*/
module.exports = app => {
const { router, controller, jwt } = app;
// const auth = middleware.auth(app.config.jwt);
router.get('/', controller.home.index);
router.post('/login', controller.login.login); // 登录并生成Token
router.get('/list', jwt, controller.login.list); // 需要验证Token的路由
};
6、控制器代码app/controller/login.js :
'use strict';
const Controller = require('egg').Controller;
class UsersController extends Controller {
// 验证登录并生成Token
async login() {
const {
ctx,
} = this;
// 获取用户端传递的参数
const {
username,
password,
} = ctx.request.body;
// 验证data数据,判断是否登录成功
// ......
const users = [{
id: '6546526546556543',
name: '张三', password: '123456',
},
{
id: '6546526546556546',
name: '王五', password: '123456',
},
{
id: '6546526546556545',
name: 'admin', password: '123456',
}];
let userId = '';
users.forEach(item => {
if (item.name === username && item.password === password) {
userId = item.id;
}
});
// 成功则生成Token
// 生成Token
const token = ctx.helper.getToken({ userId });//这里的getoken是被我封装在helper里面的
// app\extend\helper.js中的getToken
/*
getToken(value) {
return this.app.jwt.sign(value, this.app.config.jwt.secret);
},
*/
// 将生成的Token返回给前端
ctx.body = token;
}
// 验证Token
async list() {
const {
ctx,
} = this;
console.log(ctx.state.user);
// 打印的内容为:{ userId: '6546526546556545', iat: 1628750782 }
// iat为过期时间
// userID是生成Token时传入的 需要存储的Token数据
ctx.body = '验证成功!';
}
}
module.exports = UsersController;
7、测试:
通过接口获取token:
在postman中做测试 获取token,效果如下:
通过接口验证token:
在postman中验证token,效果如下:
注意:验证方式为在Headers加入键值对
“Authorization” : Bearer ${token}
格式必须是Bearer+空格+生成的token
(此处也可以通过封装中间件使其token验证时不需要带Bearer+空格)