NodeJS 未授权删除CRUD

iecba09b  于 2023-03-29  发布在  Node.js
关注(0)|答案(2)|浏览(121)

我试图使一个功能,用户可以删除他们创建的费用或经理可以删除他们创建的费用,但我得到一个未经授权的错误时,试图删除我的费用,我刚刚创建
费用控制器删除

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();
  });
};
m1m5dgzv

m1m5dgzv1#

你的问题的解决方法就在你的问题里
其中用户可以删除他们创建的费用,或者经理可以删除他们创建的费用
因此,可以更改下面的行以处理您的条件。

if (req.userId !== expense.userID || requestingUser.role !== "manager")

只要检查它是否工作或不作为其完全取决于您的功能。

lnvxswe2

lnvxswe22#

您需要清楚“...得到未经授权的错误”是什么意思。
如果你的意思是你从createError示例中得到了You are not authenticated!错误,那么这很可能是因为你的请求没有在请求体中添加accessToken
如果不是这样,那么可能需要根据您的功能更新以下条件:

if (req.userId !== expense.userID && requestingUser.role !== "manager")

相关问题