AWS Amplify、Next.js 和经过身份验证的 SSR 的问题

Jam*_*xam 6 authentication amazon-web-services next.js aws-amplify

我有一个 Next.js 应用程序,它使用 AWS Cognito 用户池进行身份验证。我有一个自定义 UI,并在我的代码中使用aws-amplify直接调用signIn/ signOut/etc... 的包。(我之前使用过 AWS 托管 UI,并且遇到了下面列出的相同问题 - 我希望切换并深入研究能够揭示我的问题的实际 API,但事实并非如此)

开发中的所有内容(在本地主机上运行)都工作正常 - 我可以使用以下命令在页面的渲染函数中登录并访问当前会话

import { Auth } from 'aws-amplify';
...
export default const MyPage = (props) => {
    useEffect(async () => {
        const session = await Auth.currentSession();
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

以及SSR期间

import { withSSRContext } from 'aws-amplify';
...
export async function getServerSideProps(context) {
    ...
    const SSR = withSSRContext(context);
    const session = await SSR.Auth.currentSession();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我部署到运行临时环境的 AWS Amplify 时,在 SSR 期间获取当前会话的调用失败。这会导致页面呈现就像用户未登录一样,然后在客户端能够确定用户实际上已登录时进行切换。

目前的假设 - 缺少 cookies(??):

我已检查在登录过程中是否在浏览器中正确设置了 AWS cookie。我还检查过,devtools 告诉我 cookie 已通过请求正确发送到服务器。

context.req.headers但是,如果我在临时环境中注销getServerSideProps,则 cookie 标头会丢失(而在我的开发环境中它会正确显示)。如果这是真的,这可以解释我所看到的情况,因为getServerSideProps没有看到我的身份验证令牌等...但我不明白为什么 cookie 标头会被删除?

以前有人见过这样的事情吗?这可能吗?如果是这样,为什么会发生这种情况?我认为我遗漏了一些东西,例如与配置相关的东西,但我觉得我已经非常仔细地遵循了文档 - 我当前的配置看起来像这样

Amplify.configure({
    Auth: {...}
    ssr: true
});
Run Code Online (Sandbox Code Playgroud)

Next.js 版本是11.1.2(最新)

非常感谢任何帮助!

Ped*_*ães 1

您必须使用 Next@11.0.0 才能在生产中使用 getServerSideProps、withSSRContext 和 Auth 模块。