node express 下开发token功能 生成与验证

功能描述

功能主要为服务的如何生成token,如何验证token;express下主要使用JWT方式。
原生的jsonwebtoken 与 expressJwt
两种方式的简单实现

一、jsonwebtoken + expressJwt

安装

npm install express-jwt --save
npm install jsonwebtoken --save

生成

tokenUtil.secret,tokenUtil.expiresIn为公共文件定义的变量,便于后期维护

//引入
var jwt = require('jsonwebtoken');

var JwtMessage = {
	username:username,
	userId:userId,
	permission:permission
}
// tokenUtil.secret 公共密钥
const token = 'Bearer ' + jwt.sign(JwtMessage,tokenUtil.secret,tokenUtil.expiresIn);
res.json({
  status: 'ok',
  token: token 
})

验证
app.js

//验证token是否过期并规定哪些路由不用验证
app.use(expressJwt({
	secret: 'cy',
	algorithms:['HS256'],
	requestProperty:'auth',//自定义获取的信息位置,默认通过req.user获取
	credentialsRequired: false //是否允许无token请求
}).unless({
	path: ['/users/login']//除了这个地址,其他的URL都需要验证
}));

注:expressJwt验证的值为Bearer + ’ ’ + token ,且在hearders中authorization字段


二、使用jsonwebtoken生成与验证

生成
生成基本一样,也可以使用一中的方法

也可以封装一下,如下

  • 封装
var jwt = require('jsonwebtoken');
var signkey = 'cy';

var expiresIn={
		expiresIn: 3600 * 24 * 3
	}
// 密钥
export secret = signkey;
export expiresIn = expiresIn;

exports.setToken = function(username,userId,permission){
	return new Promise((resolve,reject)=>{
		const token = jwt.sign({
			username:username,
			userId:userId,
			permission:permission
		},signkey,{expiresIn:3600*24*3});
		resolve(token);
	})
}

exports.verToken = function(token){
	return new Promise((resolve,reject)=>{
		var info = jwt.verify(token, signkey ,(error,res) => { 
			var data={}
			if(error){
				data.code = '01';
				data.obj = error;
			}else{
				data.code = '00';
				data.obj = res;
			}
			return data
          });
		resolve(info);
	})
}
  • 调用文件生成token
tokenUtil.setToken(username,userId,permission).then((data)=>{
	return res.json({
			  status: 'ok',
			  token: data 
			})
	})

验证
在调用方法中先进行验证token

//tokenUtil为引入公共文件
var tokenUtil = require('../../public/javascripts/util/token.js');


 var token = req.headers['authorization'];
 tokenUtil.verToken(token).then((Data)=>{
 	res.json(Data);
 }).catch((err)=>{
 	console.log(err);
 })
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值