将 next-auth 应用程序部署到 Vercel 会在凭据提供程序中创建错误

Deploying next-auth app to Vercel creates error in credentials provider

我正在尝试将我的下一个应用程序部署到 Vercel。我正在使用 next-auth 通过凭据和 api returns JWT 进行身份验证。在本地主机上它工作正常,但是当我把它放在 Vercel 上并尝试登录时,没有任何反应。但是,当我在项目的仪表板功能中查看日志时,出现错误:

[POST] /api/auth/callback/credentials
03:32:18:58
2021-12-21T00:32:19.071Z    410db3c3-d841-45d1-8df2-0cdbb4aa8793    ERROR   TypeError: "ikm"" must be an instance of Uint8Array or a string
    at normalizeUint8Array (/var/task/node_modules/@panva/hkdf/dist/node/cjs/index.js:20:15)
    at normalizeIkm (/var/task/node_modules/@panva/hkdf/dist/node/cjs/index.js:24:17)
    at hkdf (/var/task/node_modules/@panva/hkdf/dist/node/cjs/index.js:47:60)
    at getDerivedEncryptionKey (/var/task/node_modules/next-auth/jwt/index.js:99:34)
    at Object.encode (/var/task/node_modules/next-auth/jwt/index.js:45:34)
    at Object.callback (/var/task/node_modules/next-auth/core/routes/callback.js:457:37)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async NextAuthHandler (/var/task/node_modules/next-auth/core/index.js:197:28)
    at async NextAuthNextHandler (/var/task/node_modules/next-auth/next/index.js:40:7)
    at async Object.apiResolver (/var/task/node_modules/next/dist/server/api-utils.js:101:9)
2021-12-21T00:32:19.071Z    410db3c3-d841-45d1-8df2-0cdbb4aa8793    ERROR   TypeError: "ikm"" must be an instance of Uint8Array or a string
    at normalizeUint8Array (/var/task/node_modules/@panva/hkdf/dist/node/cjs/index.js:20:15)
    at normalizeIkm (/var/task/node_modules/@panva/hkdf/dist/node/cjs/index.js:24:17)
    at hkdf (/var/task/node_modules/@panva/hkdf/dist/node/cjs/index.js:47:60)
    at getDerivedEncryptionKey (/var/task/node_modules/next-auth/jwt/index.js:99:34)
    at Object.encode (/var/task/node_modules/next-auth/jwt/index.js:45:34)
    at Object.callback (/var/task/node_modules/next-auth/core/routes/callback.js:457:37)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async NextAuthHandler (/var/task/node_modules/next-auth/core/index.js:197:28)
    at async NextAuthNextHandler (/var/task/node_modules/next-auth/next/index.js:40:7)
    at async Object.apiResolver (/var/task/node_modules/next/dist/server/api-utils.js:101:9)
RequestId: 410db3c3-d841-45d1-8df2-0cdbb4aa8793 Error: Runtime exited with error: exit status 1
Runtime.ExitError

补充信息: SignIn() 函数如下所示:

signIn("credentials", {
        email: values.name,
        password: values.password,
        redirect: false,
        callbackUrl: `/app`
      })
        .then((data) => console.log("loginpagethen", data))
        .catch((error) => console.log("loginpagecatch", error));

我认为问题出现在 jwt callback 函数的某处,因为 authorize returns 一个用户(具有所有数据,包括来自服务器的 jwt)。另外,如果我在 jwt callback 函数中 console.log 用户,我实际上可以看到用户对象。但是会话不存在。

 async jwt({ token, user, account, profile, isNewUser }) {
    if (user) {
      console.log("user", user); //user is there
      token.accessToken = user.token;
    }
    return token;
  },

  async session(session, token) {
    console.log("session", session); //session is not there
    return session;
  },
};

P.S。我添加了环境变量。

关于如何让我的应用程序在 vercel 上运行有什么想法吗?

在您的 .env 文件中创建一个环境变量:

API_SECRET_KEY=q3t6w9z$C&F)asdfasdfasfasdfasdfasd1sdfasf