export const {
handlers: { GET, POST },
auth,
signIn,
signOut,
} = NextAuth({
providers: [
GitHub({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
],
callbacks: {
async signIn({ user, account, profile }) {
await connectToDb;
console.log(user.email);
const dbUsers = await User.find();
console.log(dbUsers);
return true;
},
},
});
每当我使用
console.log(user.email);
const dbUsers = await User.find();
console.log(dbUsers);
在回调中我面临 TypeError: Immutable
我该如何解决。连接数据库时它仍然有效。但是当涉及到
const dbUsers = await User.find()
时,它向我显示上述错误。我不知道如何避免我正在观看 YouTube 上的教程,并且我在练习中实现了打字稿。
出现此错误的原因是 NextAuth 与 Edge 兼容,但某些数据库适配器(例如 Prisma)不兼容。如果您的任何文件配置为在 Edge 上运行,您可能会遇到此错误。
解决方案是在app/api/[...nextauth]文件夹中找到route.ts文件并将运行时设置为nodejs或从route.ts文件中完全删除运行时变量。
您的 app/api/auth/[...nextauth]/route.ts 应类似于以下内容:
从“@/auth”导出{ GET, POST }; 导出常量运行时=“nodejs”; // 您可以选择删除它,但如果将其设置为“edge”,则在使用边缘不兼容的适配器时会出现错误。