无法在nextjs的_app.js内执行getServerSideProps

iswrvxsc  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(271)

希望更好地理解如何使用这样的函数,以便获得会话信息,甚至考虑在哪里放置我的导航组件。
目前,我的导航嵌套在_app. js文件中

<NavBar />
<Component {...pageProps} />

我正试图从服务器获取会话信息,因为我希望确保导航根据用户会话信息显示登录/注销,例如

export async function getServerSideProps(context) {
  console.log("index getting session");
  try {
    const session = await getSession(context);

    return {
      props: {
        session,
      },
    };
  } catch (error) {
    return {
      props: {
        session: null,
      },
    };
  }
}

P.S -顶部的console.log()未运行
这是不正确的吗?如果有人有更好的建议,或者我应该把我的导航,以确保它可以执行getServerSideProps的认证目的。
感谢所有的帮助。花了一天多的时间在上面,许多人向我指出了Next-Auth问题的方向,例如NEXT_PUBLIC_SECRET未正确设置或NEXTAUTH_URL未正确设置,但我觉得可能是getServerSideProps

iq0todco

iq0todco1#

您不能在 * App.js * 文件中调用getServerSideProps,请查看此处
稍后将介绍它,但我们需要弄清楚语义,因为我们真的不希望getServerSideProps in _app选择退出所有页面的静态生成
如果你想让导航根据用户会话信息显示登录/注销,那么一个解决方案是从<NavBar/>组件调用会话,你不必从服务器端调用它并将其传递给一个组件,你可以简单地利用useSession()并从<NavBar/>组件内部调用它以访问会话数据。

使用会话()

客户端:是的
服务器端:不想
NextAuth.js客户端中的useSession()React Hook是检查某人是否登录的最简单方法。
确保已添加到pages/_app.js

import { useSession } from "next-auth/react";
//...
const NavBar = () => {
const { data: session, status } = useSession()
//...
}

现在,基于status,您可以决定在JSX中显示什么按钮:

{status === "authenticated" ? <SignOutButton/> : <SignInButton/>}

如果你想从服务器组件访问会话,你必须使用getServerSession()方法。

相关问题