如何在应用程序目录中的下一个 js 13 beta 服务器组件中使用 next auth getServerSession

问题描述 投票:0回答:2

我将 next auth v4 与带有服务器组件的 next js 13 beta 一起使用,一切正常。但是我有一种情况需要知道登录的用户 ID,因为我使用的是下一个身份验证,我可以访问会话,我可以使用 useSession() 但随后我需要将组件设为客户端组件,所以我想在服务器上使用它,我可以在 API 中使用 getServerSession,因为我可以访问 req 和 res 对象,但是在下一个带有新应用程序目录的 js beta 中,我不能这样做。如果您知道如何解决此问题,请告诉我。谢谢

import { getServerSession } from "next-auth";
import { authOptions } from "@/pages/api/auth/[...nextauth]";

const Test = async () => {
    const user_id = 1; // How do I get user id from session, user_id is available in session

    // I don't have access req & res object in server component.
    const data = await getServerSession(request, response, authOptions);

    console.log(data);

});
    return (
        <></>
    );
};

export default Test;

没有找到足够的信息

session prisma next-auth beta nextjs13
2个回答
5
投票

我找到了答案,在下一个 js 13 beta 中,你不需要使用请求和响应对象,只需使用 authOptions,它就可以了

import { getServerSession } from "next-auth";
import { authOptions } from "@/pages/api/auth/[...nextauth]";

const Test = async () => {

    const data = await getServerSession(authOptions);

    console.log(data);

});
    return (
        <></>
    );
};

export default Test;

0
投票

选项文档

import { NextAuthOptions } from 'next-auth'
import { getServerSession } from 'next-auth'

// this is NextAuthOptions
export interface AuthOptions {
  providers: Provider[];
  secret?: string;
  session?: Partial<SessionOptions>;
  jwt?: Partial<JWTOptions>;
  pages?: Partial<PagesOptions>;
  callbacks?: Partial<CallbacksOptions>;
  events?: Partial<EventCallbacks>;
  adapter?: Adapter;
  debug?: boolean;
  logger?: Partial<LoggerInstance>;
  theme?: Theme;
  useSecureCookies?: boolean;
  cookies?: Partial<CookiesOptions>;
}

const session = await getServerSession(authOptions)

// Based on AuthOptions interface
const authOption: NextAuthOptions = {
  // Since you tagged prisma
  adapter: PrismaAdapter(yourDbConfig),
  session: {
    strategy: 'jwt',
  },
  // https://next-auth.js.org/configuration/pages
  pages: {
    signIn: '/login',
  },
  providers: [
    GoogleProvider({
      clientId: clientId,
      clientSecret: clientSecret,
    }),
  ],
  callbacks: {
    async session({ token, session }) {
      if (token) {
        // set session here
      }
      return session
    },
    async jwt({ token, user }) {
      const dbUser = getUserByTokenEmail

      //add logic here
    },
    
  },
}
© www.soinside.com 2019 - 2024. All rights reserved.