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

Next.js搭配AWS Amplify时getServerSideProps报错No Current User,已登录如何解决?

问题根源

你调用withSSRContext()时没有传入服务端的请求上下文,服务端无法获取浏览器存储的用户登录Cookie凭证,因此无法识别到已登录的用户。你在AppSync控制台查询时手动携带了登录凭证,所以能正常返回结果。

修复方案

修改getServerSideProps代码,传入请求上下文、动态读取当前登录用户的用户名:

export async function getServerSideProps(context) {
  // 传入服务端请求上下文,加载用户登录凭证
  const SSR = withSSRContext({ req: context.req });
  try {
    // 获取当前登录用户信息
    const currentUser = await SSR.Auth.currentAuthenticatedUser();
    const { data } = await SSR.API.graphql({
      query: postsByUsername,
      variables: {
        // 动态读取当前用户的用户名,不要硬编码
        username: currentUser.username
      },
      authMode: "AMAZON_COGNITO_USER_POOLS",
    });
    return {
      props: {
        posts: data.postsByUsername.items,
      },
    };
  } catch (err) {
    // 处理未登录的情况,避免直接抛出错误
    return {
      props: {
        posts: []
      }
      // 未登录时也可配置跳转:
      // redirect: { destination: '/login', permanent: false }
    }
  }
}

额外检查项

  • 确认你的Amplify依赖版本为v5及以上,如果升级到了v6版本,需要改用runWithAmplifyServerContext方法实现服务端鉴权,原有withSSRContext在v6中已废弃。
  • 确认Cognito用户池配置的cookie有效期符合预期,不存在登录后Cookie提前过期的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:57:01