是否有任何方法使nestjs REST API只接受来自https域的调用?
默认阻塞任何curl或postman请求,并且只接受我的前端客户端(https://my-example-domain.com)发出的请求。
你的问题的解决方案是使用中间件,为所有路由定义express。
首先我们将解决wget, curl和postman的问题。这些工具类似于浏览器,所以检测它们的唯一方法是通过它们的名称(User-Agent),所以我们使用req.get (" User-Agent ")
的User-Agent的名称并使用indexOf
检查这些名称是否存在,我们将它们转换为像Boolean ()
方法一样的布尔值,我们检查名称是否与三个中的一个匹配,如果我们点击我们返回。
现在我们将把https
协议,这是非常简单的,我们只重定向用户到一个url与https在开始,但保持它在当前的路由。
const express = require("express");
const app = express();
app.use((req, res, next) => {
let userAgent = req.get("User-Agent").toLowerCase();
let isWget = Boolean(userAgent.indexOf("wget"));
let isCURL = Boolean(userAgent.indexOf("curl"));
let isPostman = Boolean(userAgent.indexOf("postman"));
if (isWget || isCURL || isPostman) {
res.sendStatus(404);
return next();
}
res.redirect(`https://${req.headers.host + req.url}`);
return next();
})
app.listen(port, () => {
console.log("Listening!");
})