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

unstable_getServerSession返回null及'decryption operation failed'问题求助

问题解决:PUT请求获取Session返回null且报'decryption operation failed'错误

核心原因及修复步骤

1. 缺少NEXTAUTH_SECRET环境变量

'decryption operation failed'错误几乎都是因为未配置或配置错误的NEXTAUTH_SECRET导致的。JWT的加密解密依赖这个密钥,没有它无法正确解析会话。

  • 修复方法:
    在项目根目录的.env.local文件中添加:
    NEXTAUTH_SECRET=your-secret-key-here
    
    可以用以下命令生成安全的密钥:
    openssl rand -hex 32
    
    生成后将密钥复制到环境变量中即可。

2. Session策略与适配器冲突

你同时配置了MongoDBAdapter和session: { strategy: "jwt" },这会导致冲突:当使用数据库适配器时,默认Session策略是database,强制设置为jwt会让适配器无法正常工作,进而导致会话解析失败。

  • 修复方法:
    移除session配置项,让NextAuth自动适配数据库策略,同时调整session回调以适配database模式参数:
    export const authOptions = {
      adapter: MongoDBAdapter(clientPromise),
      providers: [
        GoogleProvider({
          clientId: process.env.GOOGLE_CLIENT_ID,
          clientSecret: process.env.GOOGLE_CLIENT_SECRET,
        }),
      ],
      pages: {
        signIn: "/",
      },
      callbacks: {
        session: async ({ session, user }) => {
          if (session?.user) {
            session.user.id = user.id;
          }
          return session;
        },
      },
    };
    

3. API路由中无效的findByIdAndUpdate调用

你的PUT请求里await User.findByIdAndUpdate();是无参数调用,这会抛出数据库错误,虽不直接导致Session问题,但会影响接口正常运行,需要补充参数并增加权限校验:

if (req.method === "PUT") {
  const { username } = req.body;
  if (!session) {
    return res.status(401).json({ error: "未授权" });
  }
  await User.findByIdAndUpdate(session.user.id, { username });
  res.json(session);
}

4. 确认unstable_getServerSession调用正确性

确保你的NextAuth版本与unstable_getServerSession兼容,并且在API路由中正确传入req、res和authOptions参数。如果使用Next.js 13+ Pages Router,该方法可正常使用;若为App Router,建议改用稳定版的getServerSession。


内容的提问来源于stack exchange,提问作者Kusal Kalinga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:25:08