如何解决 next-auth 中的“getUserByAccount 不是函数”?

N1K*_*N1K 9 next.js prisma next-auth

我已将 Nextjs 更新到最新版本,并按照文档的指定更新了 next-auth 和 prisma 适配器。

但是,当我尝试在应用程序中进行身份验证时,signIn我收到最新更新的以下错误:

[next-auth][error][OAUTH_CALLBACK_HANDLER_ERROR] 
https://next-auth.js.org/errors#oauth_callback_handler_error getUserByAccount is not a function {
  message: 'getUserByAccount is not a function',
  stack: 'TypeError: getUserByAccount is not a function\n' +
    '    at Object.callback (/home/.../node_modules/next-auth/core/routes/callback.js:81:39)\n' +
    '    at runMicrotasks (<anonymous>)\n' +
    '    at processTicksAndRejections (internal/process/task_queues.js:95:5)\n' +
    '    at async NextAuthHandler (/home/.../node_modules/next-auth/core/index.js:103:28)\n' +
    '    at async NextAuthNextHandler (/home/.../node_modules/next-auth/next/index.js:40:7)\n' +
    '    at async [...]/node_modules/next-auth/next/index.js:80:32\n' +
    '    at async Object.apiResolver (/home/.../node_modules/next/dist/server/api-utils.js:102:9)\n' +
    '    at async DevServer.handleApiRequest (/home/.../node_modules/next/dist/server/next-server.js:1014:9)\n' +
    '    at async Object.fn (/home/.../node_modules/next/dist/server/next-server.js:901:37)\n' +
    '    at async Router.execute (/home/.../node_modules/next/dist/server/router.js:210:32)',
  name: 'TypeError'
}
Run Code Online (Sandbox Code Playgroud)

我是否做错了什么,或者我缺少什么不兼容的地方?

相关的package.json

...
    "@next-auth/prisma-adapter": "^0.5.2-next.19",
    "next": "^12.0.3",
    "next-auth": "4.0.0-beta.6",
    "prisma": "^3.4.1",
...
Run Code Online (Sandbox Code Playgroud)

[...nextauth].ts:

import NextAuth from 'next-auth';
import CognitoProvider from 'next-auth/providers/cognito';
import { PrismaAdapter } from '@next-auth/prisma-adapter';
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

export default NextAuth({
  adapter: PrismaAdapter(prisma),
  providers: [
    CognitoProvider({
      clientId: process.env.COGNITO_CLIENT_ID,
      clientSecret: process.env.COGNITO_CLIENT_SECRET,
      issuer: process.env.COGNITO_ISSUER,
    }),
  ],

  callbacks: {
    async session({ session, user }) {
      session.userId = user.id;
      session.role = user.role;
      return Promise.resolve(session);
    },
  },
});
Run Code Online (Sandbox Code Playgroud)

Gor*_*vic 13

终于解决了问题。由于 next-auth 已转移到 monorepo,更新软件包是不够的,您需要先卸载它,然后再次安装。

跑步:

npm uninstall next-auth @next-auth/prisma-adapter
Run Code Online (Sandbox Code Playgroud)

然后:

npm install @next-auth/prisma-adapter
Run Code Online (Sandbox Code Playgroud)

这为我解决了这个问题。