【发布时间】:2021-11-15 12:12:59
【问题描述】:
我在 Next.js 应用程序中使用 /api 端点来发送电子邮件。请求来自这样的客户端表单 (为简洁和安全起见,部分代码已编辑):
const onSubmit = async (data) => {
const result = await fetch('/api/customer_enquiry', {
method: 'POST',
body: JSON.stringify(data)
})
.then(res => {
router.push({
pathname: '/thanks'
})
})
}
而 /api/customer_enquiry 端点是这样的:
...
const response = fetch(`https://api.sendgrid.com/v3/mail/send`, requestOptions)
res.status(200).json(response)
我选择了 IP“允许列表”。我的 SendGrid 帐户中的 IP 地址有助于提高安全性,我一直假设 Next.js 的 /api 端点在 Next.js 上运行 webhost 端,因此我期望 IP 地址是 webhost 的 IP 地址,因此是相同的每次。但是,发送的 IP 地址不是虚拟主机的 IP 地址,而是客户端计算机的 IP 地址,因此被“列入黑名单”。我是否对 Next.js /api 运行 webhost 端做出了错误的假设,还是我做错了什么?
非常感谢。
【问题讨论】:
-
API 路由确实在服务器上运行。你如何测试这个?启动 Next.js 服务器的机器是否与在浏览器中访问应用程序的机器相同?还是您远程托管 Next.js 应用程序?
-
谢谢@juliomalves。对于测试,该应用程序托管在 Heroku 上。所以我假设 /api 端点也会在服务器上运行?但是,当 api 路由进行 fetch 调用时,SendGrid 看起来好像它来自客户端计算机。 SendGrid 向我发送一封电子邮件,警告说一个不允许的列表 IP 已尝试连接到该服务。它还给了我有问题的 IP,这与测试客户端的 IP 相匹配。希望这是有道理的。
标签: next.js sendgrid sendgrid-api-v3