使用next-auth中间件登录后重定向页面

x6492ojm  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(232)

我想使用下一个认证中间件来保护所有页面。我通过查看next-auth的官方文档(next-auth)来设置中间件,并确认它可以在不登录的情况下重定向。
但是,当我登录时,它仍然重定向到登录页面。
请让我知道我做错了什么
[...nextauth].ts

import NextAuth, { NextAuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import client from "@/libs/server/client";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import { Session } from "next-auth/";

interface UserSession extends Session {
  id: string;
}
export const authOptions: NextAuthOptions = {
  // Configure one or more authentication providers
  adapter: PrismaAdapter(client),
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
    }),
  ],
  callbacks: {
    session: ({ session, user }) => {
      (session as UserSession).id = user.id;
      return session;
    },
    redirect: ({ url, baseUrl }) => {
      return baseUrl;
    },
  },
  secret: process.env.NEXTAUTH_SECRET,
  pages: {
    signIn: "/enter",
  },
};

export default NextAuth(authOptions);

middleware.ts

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

export const config = {
  matcher: ["/mypage","/with", "/product/:path*"],
};
z5btuh9x

z5btuh9x1#

我成功地设置了会话策略并将jwt添加到回调中。

import NextAuth, { NextAuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import client from "@/libs/server/client";
import { PrismaAdapter } from "@next-auth/prisma-adapter";

export const authOptions: NextAuthOptions = {
  adapter: PrismaAdapter(client),
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
    }),
  ],
  callbacks: {
    jwt({ token, account, profile }: any) {
      if (account) {
        console.log("token", token);
        token.accessToken = account.access_token;
        token.id = profile.id;
      }
      return token;
    },
    session({ session, token }: any) {
      session.accessToken = token.accessToken;
      session.id = token.sub;
      return session;
    },
    redirect({baseUrl}) {
      return baseUrl;
    }
  },
  secret: process.env.NEXTAUTH_SECRET,
  session: {
    strategy: "jwt",
  },
  pages: {
    signIn: "/enter",
  },
};

export default NextAuth(authOptions);

相关问题