我对此事迟到了,但我遇到了同样的问题,这是我找到的解决方法。
所以在 Next.js@13^ 或 App 路由中,他们要求你不要修改 next-env.d.ts。他们说这是为了帮助他们在将来轻松添加 Next 的更新/功能,所以他们会在每次构建时重新生成它。
具体来说,原始文件中写道,
所以解决这个问题的方法是创建一个新的
模块,可以随意命名。按照惯例,最好将其命名为
next-auth-extensions.d.ts
,放在与
next-env.d.ts
相同的位置/文件夹中,然后将其添加到
tsconfig.json
中的
includes
属性中。
所以,以下文件是我在Next、Typescript和Next-Auth配置中的最终结果。
import NextAuth, { DefaultSession } from "next-auth";
declare module "next-auth" {
interface Session {
user: {
id: string;
} & DefaultSession["user"];
}
}
{
...
"compilerOptions": {
...
},
"include": ["next-env.d.ts", "next-auth-extensions.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
...
}
import { db } from "@/db";
import { PrismaAdapter } from "@auth/prisma-adapter";
import NextAuth, { NextAuthOptions } from "next-auth";
export const authOptions: NextAuthOptions = {
adapter: PrismaAdapter(db),
providers: [
...
],
callbacks: {
async session({ session, user }) {
console.log(user);
session.user.id = user.id;
return session;
},
},
...
};
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
我对GraphQL的任何适配都不确定,因为我以前从未使用过,但这对我来说有效。请查看下面的
package.json
,以防版本有差异。如果可以,请告诉我它是否有效。
注意:这不是官方的方式,只是我研究并尝试使其工作的一种方法,如果有人有建议或其他任何事情,请告诉我。
{
...
"dependencies": {
"@auth/prisma-adapter": "^1.0.3",
"@prisma/client": "^5.4.2",
...
"next": "13.5.4",
"next-auth": "^4.23.2",
"react": "^18",
...
},
token.sub
而不是token.uid
。 - Clay Morton