admin 管理员组文章数量: 1184232
如何将用户数据发送到节点 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() 方法来设置上下文并存储登录用户信息。
本文标签: 如何将用户数据发送到节点 js 中的下一个函数
版权声明:本文标题:如何将用户数据发送到节点 js 中的下一个函数? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.roclinux.cn/b/1717623838a709835.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论