JWT -- 在express 项目中的处理

关于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)
//....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值