jsonwebtoken: 把json对象生成token格式
express-jwt: 把token对象翻译成json对象
1、安装jsonwebtoken npm i jsonwebtoken
2、安装express-jwt npm i express-jwt
安装并导入 JWT 相关的两个包,分别是 jsonwebtoken 和 express-jwt
const jwt = require('jsonwebtoken') const expressJWT = require('express-jwt')
解析 post 表单数据的中间件
const bodyParser = require('body-parser') app.use(bodyParser.urlencoded({ extended: false }))
在登录成功之后,调用 jwt.sign() 方法生成 JWT 字符串。并通过 token 属性发送给客户端
定义 secret 密钥,建议将密钥命名为 secretKey
const secretKey = 'ThisMe_123' //字符串随意写 越复杂越好)
router.post('/public/login', (req, res) => { if (req.body.username !== 'zj' || req.body.password !== 'zj12345') { return res.send({ static: 1, msg: '用户名或密码错误' }) } //参数1:用户的信息 //参数2:加密的密钥 //配置对象:配置的有效日期 const token = jwt.sign({ username: req.body.username }, secretKey, { expiresIn: '30s' }) console.log(token) res.send({ static: 0, msg: '登录成功', token: 'Bearer '+token }) })
使用express-jwt
只要配置成功了 express-jwt 这个中间件,就可以把解析出来的用户信息,挂载到 req.user 属性上
7.0以前的版本配置方式:
router.use("/",expressJWT({ secret: secretKey }).unless({ path: [/^\/public\//] })) //排除以public开头的路径
7.0以后的配置方式
router.use("/", expressJwt.expressjwt({ secret: secretKey, algorithms: ['HS256'] }).unless({ path: [/^\/public\//] }))
全局错误处理中间件,捕获解析 JWT 失败后产生的错误
router.use((err, req, res, next) => { if (err.name === 'UnauthorizedError') { return res.send({ status: 406, msg: 'token不存在' }) } res.send({ status: 500, msg: '未知错误' }) })
标签:req,res,express,jwt,认证,secretKey,token,身份 From: https://www.cnblogs.com/zhaojvn/p/16785810.html