关于jwt 相关介绍可见: https://restfulapi.cn/page/jwt
使用 jsonwebtoken JWT 插件
可以使用UUID Generator vscode 插件 为其生成加入一段不规则随机字符串
utils/jwt.js
const jwt = require('jsonwebtoken')
const { promisify } = require('util')
const { uuid } = require('../config/config.default')
const tojwt = promisify(jwt.sign)
const verfiy = promisify(jwt.verify)
// jwt 验证:
module.exports.verifyToken = function (requried=true) {
return async (req, res, next) => {
var token = req.headers.authorization
token = token ? token.split("Bearer ")[1] : null
if (token) {
try {
let userinfo = await verfiy(token, uuid)
req.user = userinfo
next()
} catch (error) {
res.status('402').json({ error: '无效的token' })
}
}else if(requried){
res.status(402).json({ error: "请传入token" })
}else{
next()
}
}
}
// jwt 生成:
module.exports.createToken = async userinfo => {
var token = await tojwt(
{ userinfo },
uuid,
{
expiresIn: 60 * 60 * 24
}
)
return token
}
// var token = jwt.sign({foo:'hello'},'555')
// console.log(token);
// var jwts = jwt.verify(
// 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJoZWxsbyIsImlhdCI6MTY1MDk0MzAwNn0.e2yqqJMlOq5uR9udeCl5KAjjHsK-LsJYAFv4ro8gaTc'
// , '555'
// )
// console.log(jwts);
cotroller/userController.js 在登陆接口控制器中生成token 并返回给客户端
const { createToken } = require('../util/jwt')
// 用户登录
exports.login = async (req, res) => {
// 客户端数据验证
// 链接数据库查询
var dbBack = await User.findOne(req.body)
if (!dbBack) {
res.status(402).json({ error: "邮箱或者密码不正确" })
}
dbBack = dbBack.toJSON()
//
dbBack.token = await createToken(dbBack)
res.status(200).json(dbBack)
}
router/user.js 在接口路由中以中间件的形式去使用验证token
const {verifyToken} = require('../util/jwt')
router
.get('/getchannel',verifyToken(),userController.getchannel)
.get('/getuser/:userId',verifyToken(false),userController.getuser)
//....