token 令牌
- Token 是什么
- Token 本质是字符串,用于请求时附带在请求头中,校验请求是否合法及判断用户身份
- Token 的用途主要有三点
- 拦截无效请求,降低服务器处理压力;
- 实现第三方 API授权,无需每次都输入用户名密码鉴权;
- 身份校验
- express使用token步骤
- 安装第三方包
npm install jsonwebtoken -save
- 导入
const jwt = require('jsonwebtoken')
;
- 使用
- 生成token
let content ={name:req.body.name}; // 要生成token的主题信息,可以是用户的id、用户名等唯一的标识名, //也可以是数据库自己的id(一般使用数据库自己的id即可),但不可以是用户的密码, //类型可以是对象或字符串 let secret="syyyuigfrhygfgi" // 这是加密的key(密钥),可以是任意的内容,但在开发中一般不写在代码中,而是一个文件 let token = jwt.sign(content, secret, { expiresIn: 60*60*1 // 1小时过期 }); //调用jwt.sign方法生成token,前两个参数必传,第三个参数可不传 //生成token后,将token放在要发给客户端的json格式的数据里面, //前端就可以获得token并存入localStorage了(在服务端也可以将token存到数据库里)
- 验证token
let token = req.body.token //获取前端发过来的token,如果没有token就返回需要登录的提示信息 jwt.verify(token, secret, function (err, decode) { if (err) { // 时间失效的时候或者伪造的token res.send({'status':0}); } else { res.send({'status':1}); } }) //前两个参数必传,第三个参数可不传, //token为前端发过来的token,secret为之前自定义的密钥 //jwt.verify()的返回值为对象或字符串, //jwt.sign()第一个参数是什么类型就返回什么类型,包含之前加密了的值,相当于解密, //可以将jwt.verify()的返回值打印出来看看 //最后就可以根据jwt.verify()的返回值做相应的处理了
- 生成token
const jwt = require('jsonwebtoken') const secret = 'first_token'; //自定义密匙 const createToken = function (data) { let token = jwt.sign(data, secret, { expiresIn: 60 * 60 * 24 * 3 // 以s作为单位(目前设置的过期时间为3天) }); return token; }; //验证token const verToken = function (token) { console.log(token) return new Promise((resolve, reject) => { jwt.verify(token, secret, (error, decoded) => { if (error) { reject({ info: 'token失效' }) }else{ resolve({ info: 'token有效' }) } }); }) } module.exports = { createToken, verToken };
- 安装第三方包