我正在开发我的第一个全栈应用程序,特别是 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/