【发布时间】:2022-07-06 17:25:12
【问题描述】:
根据the documentation,您应该使用 SECRET_TOKEN 来防止未经授权访问您的重新验证 API 路由,即
https://<your-site.com>/api/revalidate?secret=<token>
但是您应该如何从前端调用该路由并保密令牌?
例如,如果您有一个简单的 POST,然后想要触发重新验证,您必须通过 NEXT_PUBLIC 公开您的秘密令牌才能使用它:
function handleSubmit(payload) {
axios.post(POST_URL, payload)
.then(() => {
axios.get(`/api/revalidate?secret=${process.env.NEXT_PUBLIC_SECRET_TOKEN}`)
})
.then(() => {
// redirect to on-demand revalidated page
})
}
我在这里缺少什么?如何在不暴露 SECRET_TOKEN 的情况下通过前端调用 API 路由?
【问题讨论】:
-
重新验证路线只适合您。你不应该从你的字体端调用它。
-
@MattTimmermans 但我相信一个常见的用例是如果用户编辑页面并且您想立即向他们显示编辑的页面 - 您将不得不使用按需重新验证。根据我在下面的回答,Next.js 的按需重新验证视频实际上不使用 SECRET_KEY 所以我想我只是省略了它并希望没有用户滥用 API 路由?
-
如果 lots 用户或 任何 用户可以执行更改页面的操作,则它不是静态的。如果我们谈论的是被特别授权编辑页面的用户,那么您可以使用密钥仅信任他们,或者使用您用来保护编辑的相同身份验证 + 授权来保护该路由功能。
-
@MattTimmermans - 我的意思是在我的特定用例中,假设我有可以制作 cmets 的用户。我想允许用户编辑评论并通过按需重新验证更新该特定评论。据我所知,在这种特定情况下没有办法保护重新验证路线?任何人都可以
GEThttps://<your-site.com>/api/revalidate?slug=/comment/123重新验证/comment/123而不仅仅是原始评论者。 -
那不是静态页面。使用 getServerSideProps 代替 getStaticProps,完全不用担心重新验证。
标签: next.js