无法使用Next.js中的next-auth在服务器端检索会话

yvfmudvl  于 2023-08-04  发布在  其他
关注(0)|答案(2)|浏览(89)

我目前在Next.js中使用next-auth时遇到了在服务器端检索会话的问题。在客户端,当我使用useSession钩子时,我可以成功地获得会话对象。但是,当我尝试在服务器端使用getSession或getServerSession检索会话时,我经常收到undefined。
Next.js v13.4.6 NextAuth v4.22.1 React v18.2

export async function getServerSideProps({req, res}) {

  const session = await getSession(req);
  const serverSession = await getServerSession(request, response, authOptions);

  return {
    props: {
      session, 
      serverSession
    },
  };
}

export default function App({ Component, pageProps: {session, serverSession,...pageProps } })
{
  console.log(session); //undefined
  console.log(serverSession); //undefined
  return (
    <SessionProvider session={session}>
        <Component {...pageProps} />
    </SessionProvider>
  )
}

字符集
我已经仔细阅读了Next.js和next-auth提供的文档,但仍然无法解决这个问题。有没有人可以帮助我理解为什么我会遇到这个问题,并提供指导,说明如何在服务器端使用Next.js中的next-auth正确检索会话?

gz5pxeao

gz5pxeao1#

这是getSession类型

export declare function getSession(params?: GetSessionParams): Promise<Session | null>;

字符集
这是GetSessionParams

export declare type GetSessionParams = CtxOrReq & {
    event?: "storage" | "timer" | "hidden" | string;
    triggerEvent?: boolean;
    broadcast?: boolean;
};


这是CtxOrReq

export interface CtxOrReq {
    req?: IncomingMessage;
    ctx?: {
        req: IncomingMessage;
    };
}


如您所见,getSession接收一个对象。所以你应该

const session = await getSession({ req:req })

zsbz8rwp

zsbz8rwp2#

我设法解决了这个问题。
问题是.env文件没有正确配置。更新URL后,一切正常。

相关问题