如何在Next.js的getServerSideProps()中获取Next-Auth的session用户ID
解决方案
Next-Auth 提供了服务端侧专用的会话获取方法 getServerSession,可以直接在 getServerSideProps 中调用,不需要依赖客户端 Hooks。
实现步骤
- 首先引入
getServerSession方法和你项目中 Next-Auth 配置的authOptions,注意路径要和你项目里存放[...nextauth]配置文件的位置对应:
import { getServerSession } from "next-auth/next" import { authOptions } from "./api/auth/[...nextauth]"
- 修改
getServerSideProps逻辑,传入请求上下文获取会话,示例代码如下:
export async function getServerSideProps(context) { // 传入上下文和auth配置,服务端侧直接获取会话 const session = await getServerSession(context.req, context.res, authOptions) // 可选:无登录态时直接跳转登录页 if (!session) { return { redirect: { destination: '/api/auth/signin', permanent: false, }, } } const res = await fetch( `http://localhost:5000/api/users/${session.id}/following` ); // 注意:res.json是异步方法,需要加await,否则会拿到Promise对象 const isFollowing = await res.json(); return { props: { isFollowing }, }; }
- 补充配置:默认的session返回值不会自带用户id,你需要在
authOptions的回调中配置将id存入session:
export const authOptions = { // 保留你原本的providers等其他配置不变 callbacks: { async jwt({ token, user }) { // 登录时将用户id存入token if (user) { token.id = user.id } return token }, async session({ session, token }) { // 把token里的id同步到session返回值 session.id = token.id return session } } }
内容的提问来源于stack exchange,提问作者Eric Pezzulo
相关产品推荐
相关产品推荐

