next.js 在生产环境中用于getServerSideProps函数时,下一个身份验证getSession API调用失败

polhcujo  于 2023-01-02  发布在  其他
关注(0)|答案(4)|浏览(176)

getSession在客户端工作正常,但在服务器端工作不正常
在服务器端调用它时,我在服务器上收到此错误:
错误-〉https://next-auth.js.org/errors#client_fetch_error会话获取错误:对https://nextauth_url_internal/api/auth/session的请求失败,原因:获取地址信息未找到nextauth_url_internal
服务器端代码

export const getServerSideProps = async (context) => {
  const { req } = context;
  try {
    const session = await getSession({ req });
    console.log({ session });
    if (!session) return { redirect: { destination: '/', permanent: false } };
    return { props: { session } };
  } catch (error) {
    console.log(error);
  }
};
ars1skjm

ars1skjm1#

似乎您没有配置NEXTAUTH_URL环境变量。

91zkwejq

91zkwejq2#

你能试试这个吗:删除. next build文件夹,并通过运行npm run build创建一个新版本。
再试一次。

hujrc8aj

hujrc8aj3#

在NextAuth函数中添加secret选项

export default NextAuth({
   // Configure one or more authentication providers
   providers: [
      GoogleProvider({
         clientId: process.env.GOOGLE_CLIENT_ID,
         clientSecret: process.env.GOOGLE_CLIENT_SECRET,
      }),
      // ...add more providers here
   ],
   secret: process.env.SECRET,
   pages: {
      signIn: "/auth/signin",
   },
   callbacks: {
      async session({ session, token, user }) {
         session.user.username = session.user.name
            .split(" ")
            .join("-")
            .toLocaleLowerCase();

         session.user.uid = token.sub;
         return session;
      },
   },
});
hlswsv35

hlswsv354#

我也遇到过同样的问题,结果是我没有正确设置env。
我在GitHub上使用了不同的“OAuth App”进行“开发”和“生产”。
确保您的本地环境和生产环境对应于正确的GitHub OAuth应用。(GITHUB_ID,GITHUB_SECRET,NEXTAUTH_URL)确保OAuth应用上的callback_URL与NEXTAUTH_URL相同。
此外,您还需要一个用于生产的“秘密”env变量,但不一定用于本地,因为它将在开发时自动生成。

相关问题