node.js - 如何限制express api仅允许来自您的客户端的post请求?

标签 node.js reactjs mongodb express mern

我正在开发我的第一个全栈应用程序,特别是 MERN 堆栈,但遇到了一些问题。我正在尝试在我的网站上为统一游戏实现存储在数据库中的排行榜。我已经一切正常,客户可以使用我的 Express api 从我的 MongoDB Atlas 数据库发布和获取分数。但是,在排行榜的情况下,我需要确保分数只能由客户端根据游戏的进展情况发送。在当前的工作配置下,任何人都可以通过 API 发送欺骗分数,而无需玩游戏。

我首先想到的是尝试实现 JWT 来验证 api 调用是否来自站点,但在我看来,用户仍然可以复制像 JWT 这样的任何身份验证 token ,并使用 Postman 轻松发送欺骗分数。

我对数据库不太熟悉,并且怀疑如果我不使用 Atlas 这样的 DBaaS 提供商,这个问题可能会得到解决,但我并不完全确定。

任何想法或建议将不胜感激!

最佳答案

您可以定义一个中间件函数并检查传入请求的方法:

const allowOnlyPost = (req, res, next) => {
    if (req.method !== 'POST') {
        return res.status(401).send(`Method ${req.method} not allowed`)
    }
    next()
}

module.exports = { allowOnlyPost }

然后将其应用到您要保护的路由:

const { allowOnlyPost } = require('./your/middleware/folder')

app.use('/route/to/protect', allowOnlyPost, (req, res) => { ... })

关于node.js - 如何限制express api仅允许来自您的客户端的post请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71319307/

相关文章:

node.js - 查询 MongoDb 参数并返回具有唯一 ID 的记录

javascript - Sinon - 监视构造函数方法

node.js - 我可以让nodejs在每次修改后工作而无需重新启动服务器吗

javascript - 如何防止相同的组件在导航时重新渲染? react 路由器 v6

node.js - Mongoose:跨多个领域的独特性

mongodb - 如何在mongoDB中使用通配符字段?

mysql - Node.js 更新 mysql 数据库

javascript - React+Typescript+Webpack项目中Jest配置错误

reactjs - 输入类型日期 - 禁用除星期一之外的每一天(在 ReactJS 中)

php - 在创建/修改时将 Drupal 节点插入到 MongoDB