最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何将用户数据发送到节点 js 中的下一个函数?

网站源码admin35浏览0评论

如何将用户数据发送到节点 js 中的下一个函数?

如何将用户数据发送到节点 js 中的下一个函数?

我想实现检查是否有令牌的功能,验证令牌并授予对受保护路由的访问权限,但我不知道如何将用户数据发送到下一个功能

authController.js 文件 -

exports.protect = async (req, res, next) => {
  //1) Getting token and check if it's there
  let token;
  if (
    req.headers.authorization &&
    req.headers.authorization.startsWith("Bearer")
  ) {
    token = req.headers.authorization.split(" ")[1];
  } else if (req.cookies.jwt) {
    token = req.cookies.jwt;
  }

  if (!token) {
    res.status(401).json({
      status: "fail",
      message: "You are not logged in. Please login to get access",
    });
    next();
  }
  //2) Verificating the token

  //const decoded = await promisify(jwt.verify)(token, process.env.JWT_SECRET);
  
  const decoded = jwt.verify(token, process.env.JWT_SECRET);
  
  let currentUser;
  //3)Check if user still exists
  db.getConnection(async (err, connection) => {
    const sqlSearch = "SELECT * FROM users WHERE id = ?";
    const sqlQuery = mysql.format(sqlSearch, [decoded.id]);
    connection.query(sqlQuery, (err, result) => {
      connection.release();
      currentUser = result;
    });
  });
  if (!currentUser) {
    res.status(401).json({
      status: "fail",
      message: "The user belonging to this token does no longer exist",
    });
    next();
  }

  //GRANT ACCESS TO PROTECTED ROUTE
  req.user = currentUser;
  res.locals.user = currentUser;
  next();
};

courseRouter.js 文件 -

const express = require('express');
const coursesController = require('../controllers/coursesController');
const authController = require('../controllers/authController');
const router = express.Router();

router.get('/', coursesController.getAllCourses);
router.post('/:slug', authController.protect, coursesController.buyCourse);

module.exports = router;

连接到数据库后,我不知道如何将用户数据返回给 buyCourse() 函数。我这样做的方式“currentUser”是未定义的。

回答如下:

我建议使用

AsyncLocalStorage
将登录用户存储在基于上下文的存储中,并授予对链下任何功能的访问权限。这将确保登录用户的上下文在同一执行上下文中的不同函数调用之间得到维护。

使用方法可以参考Node.js文档:https://nodejs/api/async_context.html

AsyncLocalStorage
是一个单例实例,您可以在每个传入请求上使用它的
run()
方法来设置上下文并存储登录用户信息。

发布评论

评论列表(0)

  1. 暂无评论