nodejs中给指定路由设置token验证

安装jsonwebtoken

yarn add jsonwebtoken

封装token的过期校验和生成方法

//JWT.js
const jsonwebtoken = require('jsonwebtoken');
// 密钥
const secret = "shushu"
const JWT = {
  // 生成token
  generate (value, expries) {
    // 生成webtoken签名
    return jsonwebtoken.sign(value, secret, { expiresIn: expries })
  },
  // 验证token
  verify (token) {
    try {
      return jsonwebtoken.verify(token, secret)
    } catch (error) {
      return false
    }
  }
}
module.exports = JWT

封装对于路由是否携带token校验

//authenticateToken.js
const JWT = require("./JWT");

function authenticateToken (req, res, next) {
  // 如果是访问的登录页面,那就直接放行
  if (req.url.includes('login')) {
    next()
    return
  }
  const token = req.headers["authorization"].split(" ")[1];
  if (token) {
    // 如果token有效就放行,如果token过期了就返回401【未经授权】错误
    const payload = JWT.verify(token)
    // 如果token有效的话就更新token,使得其重新计算过期时间
    if (payload) {
      const newToken = JWT.generate({
        _id: payload._id,
        username: payload.username
      }, '1d')
      res.header('Authorization', newToken);
      next()
    } else {
      res.status(401).send({ errCode: '1', errorInfo: "token过期" })
    }
  }
}
module.exports = authenticateToken

在某个路由文件中整体使用

//shop.js
var express = require('express');
var ShopRouter = express.Router();
const ShopController = require('../controllers/admin/ShopController');
// 图片上传
const multer = require('multer');
const authenticateToken = require('../utils/authenticateToken');
// 用于放置上传的图片
const upload = multer({ dest: 'public/shopuploads/' });
const upload2 = multer({ dest: 'public/shopPics/' });
// token验证
ShopRouter.use(authenticateToken)
// 注册商铺
// 由于设置文件上传,所以普通的post提交不行,需要加上multer中间件
ShopRouter.post('/register', upload.single('file'), ShopController.register)
// 获取验证码
ShopRouter.get('/getCode', ShopController.getCode)
// 登录
ShopRouter.post('/login', ShopController.login)
// 更新店铺信息
ShopRouter.put('/update', upload2.array('shopPics'), ShopController.update)
// 获取店铺列表
ShopRouter.get('/getList', ShopController.getList)
// 根据店铺id获取具体的某一个店铺
ShopRouter.get('/getList/:id', ShopController.getList)
// 删除店铺
ShopRouter.delete('/delete', ShopController.delete)
module.exports = ShopRouter;

在某个路由中使用

ShopRouter.post('/register',authenticateToken, upload.single('file'), ShopController.register)

  • 17
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值