来自 REST API 的 NextAuth csrfToken 与请求标头中的 csrfToken 不匹配

NextAuth csrfToken from REST API does not match csrfToken in request headers

提问人:jjunsa 提问时间:10/31/2023 更新时间:10/31/2023 访问量:29

问:

在我的页面上,我正在从 NextAuth 获取 csrfToken(参见 https://next-auth.js.org/getting-started/client#getcsrftoken),并且此值包含在一个名为:getCsrTokencsrfToken

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

节点 .js 下一个 .js csrf 下一个身份验证 下一个身份验证.js

评论


答: 暂无答案