You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js登录成功后Session返回Null的问题排查求助

问题排查与解决方案

核心问题1:JWT回调未正确存储用户数据

你的jwt回调逻辑完全没有处理登录时传入的user对象,导致token中没有存储用户的id、jwt、roles等关键信息,后续session回调自然无法从token中读取到这些数据,最终返回的session为空。

修复后的JWT回调代码

callbacks: {
  jwt: ({ token, user }:{token:any,user:any}) => {
    // 登录成功时,user是authorize返回的用户对象,需要把它的属性合并到token中
    if (user) {
      token.id = user.id;
      token.roles = user.roles;
      token.jwt = user.jwt;
      token.name = user.name;
    }
    // 后续请求时,直接返回已存储数据的token
    return token;
  },
  session: ({ session, token }:{session:any,token:any}) => {
    session.user.id = token.id;
    session.user.roles = token.roles;
    session.user.jwt = token.jwt;
    session.user.name = token.name;
    return session;
  },
},

核心问题2:Login组件中Session的获取与时机问题

你在onSubmit中直接打印session,如果这个session不是通过useSession()钩子获取的,或者刚完成signIn就立即读取,可能会因为session还未完成更新而显示null。

修复后的Login组件处理逻辑

确保通过NextAuth的useSession钩子获取session,并且可以通过监听session状态变化来处理页面跳转:

import { useSession, signIn } from "next-auth/react";
import { useRouter } from "next/navigation";

// ...其他代码

const { data: session, status } = useSession();
const router = useRouter();

const onSubmit: SubmitHandler<IFormValues> = async (data) => {
  const signedIn = await signIn("credentials", {
    username: data?.userName,
    password: data?.password,
    redirect: false,
    callbackUrl,
  });

  if (signedIn?.error) {
    // 处理登录错误
    console.error("登录失败:", signedIn.error);
    return;
  }

  // 登录成功后,等待session更新再跳转
  const checkSessionInterval = setInterval(() => {
    if (session) {
      clearInterval(checkSessionInterval);
      router.push("/profile");
    }
  }, 100);
};

额外检查点

  • 确保你的.env文件中配置了NEXTAUTH_SECRET,NextAuth需要这个密钥来加密session数据,缺失会导致session无法正常存储:
    NEXTAUTH_SECRET=your-secret-key-here
    
  • 检查Strapi返回的user对象是否包含first_name和last_name,如果某个字段为空,name可能会变成无效值,影响session的正常生成。

内容的提问来源于stack exchange,提问作者Zia Yamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:17:37