NextJS next-auth get session 始终为空
NextJS next-auth get session always null
无法在 api 调用中使用 getSession({req}) 获取会话数据?
组件上的 useSession() 工作正常。
包版本:nextjs@12.01, next-auth@4.3.1
问题:api/lists.ts:
import prisma from "../../../lib/prisma";
import { getSession } from "next-auth/react"
export default async (req: NextApiRequest, res: NextApiResponse) => {
const session = await getSession({ req });
console.log('session data is always null', session);
nexuauth.js 配置文件:
callbacks: {
session: async ({ session, user, token }) => {
if (session?.user) {
session.user.id = user.id;
}
// console.log('session callback', session);
return session;
},
},
session: { strategy: "database" },
_app.js 文件:
function MyApp({ Component, ...pageProps }) {
return (
<SessionProvider session={pageProps.session} refetchInterval={5 * 60}>
<Main>
<Component {...pageProps} />
</Main>
</SessionProvider>
)
}
export default MyApp
在 login.js 文件上(工作正常):
export default function Login() {
const { data: session } = useSession()
会话依赖于cookies,您的浏览器会自动发送cookies。所以在客户端 side/browser 上的 useSession()
始终有效。但是当你使用getSession
cookies不会自动出现,我们需要手动设置它们(github issue)-
const response = await fetch(url, {
headers: {
cookie: req.headers.cookie || "",
},
});
要自动添加这些,您或许可以插入 interceptors
(axios, fetch) 或创建一个 wrapper
函数。
无法在 api 调用中使用 getSession({req}) 获取会话数据? 组件上的 useSession() 工作正常。
包版本:nextjs@12.01, next-auth@4.3.1
问题:api/lists.ts:
import prisma from "../../../lib/prisma";
import { getSession } from "next-auth/react"
export default async (req: NextApiRequest, res: NextApiResponse) => {
const session = await getSession({ req });
console.log('session data is always null', session);
nexuauth.js 配置文件:
callbacks: {
session: async ({ session, user, token }) => {
if (session?.user) {
session.user.id = user.id;
}
// console.log('session callback', session);
return session;
},
},
session: { strategy: "database" },
_app.js 文件:
function MyApp({ Component, ...pageProps }) {
return (
<SessionProvider session={pageProps.session} refetchInterval={5 * 60}>
<Main>
<Component {...pageProps} />
</Main>
</SessionProvider>
)
}
export default MyApp
在 login.js 文件上(工作正常):
export default function Login() {
const { data: session } = useSession()
会话依赖于cookies,您的浏览器会自动发送cookies。所以在客户端 side/browser 上的 useSession()
始终有效。但是当你使用getSession
cookies不会自动出现,我们需要手动设置它们(github issue)-
const response = await fetch(url, {
headers: {
cookie: req.headers.cookie || "",
},
});
要自动添加这些,您或许可以插入 interceptors
(axios, fetch) 或创建一个 wrapper
函数。