@[TOC]JWT生成token 字符串和应用(个人学习笔记)
1.安装生成token字符串的包
npm i jsonwebtoken
2.配置全局config文件(config.js)
module.exports = {
// 加密和解密的token秘钥
jwtSecretKey: 'advance8',
// token有效期
expiresIn: '12h'
}
3.导入jsonwebtoken包,并生成token返回客户端
// 导入生成token的包
const jwt = require('jsonwebtoken')
// 导入全局配置文件
const config = require('../config')
const { jwtSecretKey } = require('../config')
// 登录处理函数中
// 在服务器端生成token字符串
// 删除用户的密码和头像信息
const user = { ...result[0], password: '', user_pic: '' }
// 对用户信息进行加密生成字符串
const tokenStr = jwt.sign(user, jwtSecretKey, { expiresIn: config.expiresIn })
res.send({
status: 200,
message: '登录成功',
token: 'Bearer ' + tokenStr
})
4.配置解析token
解析token中间件安装命令
npm i express-jwt
导入中间件和config配置文件(入口文件中配置)
// 在路由之前配置解析token的中间件
const expressJWT = require('express-jwt')
const config = require('./config')
// 注册为全局的 中间件 ,并指定加密和解密的值(jwtSecretKey),最后排除不需要认证的接口
app.use(expressJWT({secret: config.jwtSecretKey, algorithms:['HS256'] }).unless({ path: [/^\/api/] }))
// 定义错误级别中间件
app.use((err, req, res, next) => {
if (err instanceof joi.ValidationError) {
// 验证失败报错
return res.cc(err)
}
// 身份认证失败错误
if (err.name === 'UnauthorizeError') {
return res.cc('身份认证失败')
}
// 未知错误
res.cc(err)
})