Next Auth 中间件和受保护的文件夹

Kai*_*oze 2 javascript next.js next-auth

我正在构建一个 NextJS 应用程序,并且我有一系列pages/dashboard/*想要保护的路由器。我正在使用 Prisma,但目前我想做的是仅当用户登录时才能够访问路由。我正在使用 Google 提供商,并且一切都设置正确。这是我的中间件.ts

export { default } from "next-auth/middleware"

export const config = { matcher: ["/dashboard"] }
Run Code Online (Sandbox Code Playgroud)

很简单。这是我的 [...nextAuth] 文件

从“next-auth”导入NextAuth,{NextAuthOptions}从“next-auth/providers/google”导入GoogleProvider从“@next-auth/prisma-adapter”导入{PrismaAdapter}从“@/lib/db”导入{prisma} /棱镜”

export const authOptions: NextAuthOptions = {
  adapter: PrismaAdapter(prisma),
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
      authorization: {
        params: {
          prompt: "consent",
          access_type: "offline",
          response_type: "code",
        },
      },
    }),
  ],
}

export default NextAuth(authOptions)
Run Code Online (Sandbox Code Playgroud)

我的秘密位于 .env.local 中,还有本地创建的 NEXTAUTH_SECRET 。我面临的问题是,每当用户进入仪表板时,它都会被重定向到登录名,一旦您登录,该页面仍然无法访问,并且不断要求登录。我注意到它useSession返回浏览器中的数据,但显然节点端的令牌或会话为空。我已经Next 13.2.4解决了Next Auth ^4.20.1 ,但我无法弄清楚为什么不起作用,我尝试了其他问题中提出的所有解决方案,但没有一个有效,而且我无法看到仪表板。有什么帮助吗?谢谢

Kai*_*oze 6

找到了解决方案,对于那些可能处于相同情况的人:我将该策略添加到下一个身份验证选项中:

 session: {
    strategy: "jwt",
  },
Run Code Online (Sandbox Code Playgroud)

现在可以了。