egg+egg-jwt实现鉴权登录

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+空格)
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值