提问人:jjunsa 提问时间:10/31/2023 更新时间:10/31/2023 访问量:29
来自 REST API 的 NextAuth csrfToken 与请求标头中的 csrfToken 不匹配
NextAuth csrfToken from REST API does not match csrfToken in request headers
问:
在我的页面上,我正在从 NextAuth 获取 csrfToken(参见 https://next-auth.js.org/getting-started/client#getcsrftoken),并且此值包含在一个名为:getCsrToken
csrfToken
page.tsx
import { getCsrfToken } from "next-auth/react";
export default async function Page () {
const csrfToken = await getCsrfToken();
return (
<form method="post" action="/api/auth/signup">
<input type="hidden" name="csrfToken" value={csrfToken} />
<input type="submit" value="Signup" />
</form>
)
}
我有一个API路由,表单发布到该路由,该路由在请求标头上调用NextAuth,以便将其与formData中的csrfToken进行比较:getCsrfToken
route.ts
import type { NextApiRequest, NextApiResponse } from "next";
import { getCsrfToken } from "next-auth/react";
const handler = async function(
req: NextApiRequest,
res: NextApiResponse
) {
try {
switch (req.method) {
case "POST": {
const csrfTokenFromReq = await getCsrfToken({ req: { headers: req.headers } });
const formData = await req.formData();
const csrfTokenFromBody = formData.get("csrfToken");
...
这两者不匹配,并且会随着每个请求而变化。我假设这是一个哈希值?如果是这样,比较这些值的最佳方法是什么?此外,有没有更好的方法来使用自定义路由和 NextAuth 的内置 csrf 功能来防止 csrf?csrfTokenFromReq
此外,这些值与我从 REST API 端点获得的值不同(请参阅 https://next-auth.js.org/getting-started/rest-api#get-apiauthcsrf)。/api/auth/csrf
答: 暂无答案
评论