Egg.js实现鉴权登录
在做egg-jwt鉴权之前,需先设置跨域请求,可参考:
eggjs设置跨域请求
1、安装egg-jwt
npm i egg-jwt --save
2、配置plugin.js
exports.jwt = {
enable: true,
package: 'egg-jwt',
};
3、配置config.default.js
config.jwt = {
secret: '123456', //自定义token的加密条件字符串,可按各自的需求填写
};
4、示例
路由代码app/router.js:
'use strict';
/**
* @param {Egg.Application} app - egg application
*/
module.exports = app => {
const { router, controller, jwt } = app;
router.get('/', controller.home.index); //普通的路由
router.post('/login', controller.users.login); //登录并生成Token
router.get('/list', jwt, controller.users.list); //需要验证Token的路由
};
控制器代码app/controller/users.js :
'use strict';
const Controller = require('egg').Controller;
class UsersController extends Controller {
//验证登录并生成Token
async login() {
const { ctx, app } = this;
//获取用户端传递的参数
const { data } = ctx.request.body;
//验证data数据,判断是否登录成功
//......
//成功则生成Token
//生成Token
const token = app.jwt.sign({
userID: data.userID, //需要存储的Token数据
}, app.config.jwt.secret);
//将生成的Token返回给前端
ctx.body = token;
}
//验证Token
async list() {
const { ctx, app } = this;
console.log(ctx.state.user);
//打印的内容为:{ userID:'2345613', iat: 1602390850 }
//iat为过期时间
//userID是生成Token时传入的 需要存储的Token数据
ctx.body = '验证成功!';
}
}
module.exports = UsersController;
测试
登录接口:
验证Token接口:
注意:验证方式为在Headers加入键值对
“Authorization” : “Bearer ${token}”
格式必须是Bearer+空格+生成的token
以上便是使用egg-jwt实现鉴权的全部过程,均为本人的个人经验,写的挺详细了,比较适合刚入门egg.js框架不久的新手学习实践。另外,如有错误欢迎指出,有不明白的地方可在评论区留言或私信我。