axios 如何使用node js阻止未授权用户的POST请求

p1tboqfb  于 2023-10-18  发布在  iOS
关注(0)|答案(1)|浏览(130)

如何使服务器上的所有POST请求仅对将其JWT令牌放置在浏览器存储中的管理员(所有授权用户)可用。现在,如果我从Insomnia应用程序发送任何POST请求,服务器将接受此。也许它需要一个middlewawre函数来阻止未经授权的会话请求,或者它可以阻止所有的整个请求。重要详情:我需要使GET请求对未授权的用户可用
下面是一个函数的例子,我想用auth检查重新格式化
app.post('/add/participants', participant)

export const participant = async (req, res) => {
    try {
        const participant = new ParticipantSchema({
            fullName: req.body.fullName,
            category: req.body.category,
            // team_id: req.body.team_id,            trainer: req.body.trainer,
            country: req.body.country,
            address: req.body.experience,
            phoneNumber: req.body.phoneNumber,
            profileLink: req.body.profileLink,
            payment: req.body.payment,
            // championshipId: championship._id,        });

        await participant.save();

        const participantData = participant._doc;

        return (res.json({
            participantData        }))
    } catch (err) {
        return (
            res.status(403).json({
                message: "403 error"            })
        )
    }
}

我使用node.js,后端使用mongoDB,前端使用react.js。
我试过在POST请求的中间使用axios.get('localhost:4444/add/participant'),但它对我不起作用。所以我尝试了express-session,但我不明白它是如何工作的,因为它总是显示401错误,即使我被授权。

3htmauhk

3htmauhk1#

您可以向post端点添加中间件,如下所示:

app.post(requireAuth,'/add/participants', participant);

然后创建一个requireAuth函数来验证JWT令牌。

async function requireAuth(req: Request, res: Response, next: NextFunction) {
  try {
    const access_token = req.cookies.access_token;
    if (access_token == null) return res.sendStatus(401);

    let isValidJWT;
    //jwt.verify logic
        
    if (isValidJWT) {
      next();
    } else {
      return res.sendStatus(401);
    }
  } catch (error: any) {
    return res.status(401);
  }
}

如果isValidJWT为true,则将调用next(),并运行participant()函数。

相关问题