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
相关产品推荐
相关产品推荐

