Я реализовал nextAuth в своем приложении и столкнулся с проблемой сбоя в пользовательском интерфейсе, когда страница перезагружается, я вижу Signed in as ../ Not signed in на секунду, пока не будет получен новый сеанс. Я нашел решение этой проблемы для NextJS 12 и старше, и у меня есть некоторые трудности с его реализацией в NextJS 13 без getServerSideProps().
'use client'
import './globals.css'
import { getSession, SessionProvider } from 'next-auth/react'
export default function RootLayout({ session, children }) {
return (
<html lang = "en">
<head />
<body>
<SessionProvider session = {session}>
{children}
</SessionProvider>
</body>
</html>
)
}
Как реализовать эту функцию для кода выше?
export async function getServerSideProps(ctx) {
return {
props: {
session: await getSession(ctx)
}
}
}
Источник: https://stackoverflow.com/a/68942471/4655668
getServerSession: при вызове со стороны сервера, т. е. в маршрутах API или в getServerSideProps, мы рекомендуем использовать эту функцию вместо getSession для получения объекта сеанса. Этот метод особенно полезен при использовании NextAuth.js с базой данных.
import { authOptions } from 'pages/api/auth/[...nextauth]'
import { getServerSession } from "next-auth/next"
export async function getServerSideProps(context) {
const session = await getServerSession(context.req, context.res, authOptions)
//...
}