我试图使一个功能,用户可以删除他们创建的费用或经理可以删除他们创建的费用,但我得到一个未经授权的错误时,试图删除我的费用,我刚刚创建
费用控制器删除
export const deleteExpense = async (req, res, next) => {
try {
const expense = await Expense.findById(req.params.id);
if (!expense) return error404(req, res, next);
// Retrieve the user making the request
const requestingUser = await User.findById(req.userId);
if (!requestingUser) return error404(req, res, next);
// Check if the user is authorized to delete the expense
if (req.userId !== expense.userID && requestingUser.role !== "manager")
return error403(req, res, next);
const deletedExpense = await Expense.findByIdAndDelete(req.params.id);
if (!deletedExpense) return res.status(404).send("House not found");
res.status(200).json({ message: "deleted" });
} catch (error) {
errorServer(error, req, res, next);
}
};
jwt中间件
import jwt from "jsonwebtoken";
import createError from "http-errors";
export const verifyToken = (req, res, next) => {
const token = req.cookies.accessToken;
if (!token) return next(createError(401, "You are not authenticated!"));
jwt.verify(token, process.env.JWT_KEY, async (err, payload) => {
if (err) return next(createError(403, "Token is not valid!"));
req.userId = payload.id;
req.role = payload.role;
next();
});
};
2条答案
按热度按时间m1m5dgzv1#
你的问题的解决方法就在你的问题里
其中用户可以删除他们创建的费用,或者经理可以删除他们创建的费用
因此,可以更改下面的行以处理您的条件。
只要检查它是否工作或不作为其完全取决于您的功能。
lnvxswe22#
您需要清楚“...得到未经授权的错误”是什么意思。
如果你的意思是你从
createError
示例中得到了You are not authenticated!
错误,那么这很可能是因为你的请求没有在请求体中添加accessToken
。如果不是这样,那么可能需要根据您的功能更新以下条件: