一、作用
jsonwebtoken和express-jwt是在nodeJs下用户权限验证,token的生成与验证工具。jsonwebtoken是将用户信息转换为加密的字符串,express-jwt是解析加密的字符串为json对象。
二、安装
npm install jsonwebtoken express-jwt --save
三、应用
1.导入jsonwebtoken jwt ,需要注意的是express-jwt不同版本引入方式不同,详细情况请参考npm
const jwt = require('jsonwebtoken')
const { expressjwt } = require('express-jwt')
2.在登录接口中使用jsonwebtoken生成token,返回给客户端,其中参数二需要定义
// 定义 secret 密钥,
const secretKey = 'hahaha secret ^_^!'
// 定义登录接口
app.post('/api/login', function (req, res) {
const userinfo = req.body
// 登录失败
if (userinfo.username !== 'admin' || userinfo.password != '123456') {
return res.send({
status: 201,
message: '登录失败',
})
}
// 登录成功
/**
* 参数1 用户的信息,一般不放密码
* 参数2 加密的密钥
* 参数3 配置对象,可以配置token的有效期等
*/
const token = jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '10s' })
res.send({
status: 200,
message: '登录成功',
token: token //token字符串
})
})
3.express-jwt的应用,path定义有权限的路由。
// 将用户登录后的token 还原成json对象
app.use(expressjwt({ secret: secretKey, algorithms: ['HS256'] }).unless({ path: [/^\/api\//] }))
// 定义登录后获取数据的接口
app.get('/admin/getuserInfo', (req, res) => {
console.log(req.auth)
res.send({
status: 200,
message: '请求数据成功!',
data: req.auth
})
})
4.设置端口
// 导入express
const express = require('express')
// 创建express实例
const app = express()
app.listen(80, () => {
console.log('server run at http://127.0.0.1:80')
})