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

NextJS 13.4 App Router API路由无法使用aws-amplify求助

问题分析与解决思路

核心原因是Next.js App Router的API路由使用Web标准Request对象,而旧版Page Router用的是Node.js的http.IncomingMessage,Amplify的withSSRContext目前对App Router的Request对象兼容性不佳,无法自动解析Cookie中的用户会话。

以下是具体解决步骤:

1. 手动解析Cookie并初始化Auth

跳过withSSRContext,直接从Request头中提取Cookie,手动配置Amplify Auth的存储来读取会话:

import { Auth } from 'aws-amplify';

export async function GET(request) {
  // 提取Cookie头
  const cookieHeader = request.headers.get('cookie');
  if (!cookieHeader) {
    return new Response('Unauthorized', { status: 401 });
  }

  // 解析Cookie键值对
  const cookies = cookieHeader.split(';').reduce((acc, cookie) => {
    const [key, value] = cookie.trim().split('=');
    acc[key] = decodeURIComponent(value);
    return acc;
  }, {});

  // 替换成你的Amplify Auth Cookie名称(通常是amplify-auth,可在浏览器DevTools中确认)
  const authSessionCookie = cookies['amplify-auth'];
  if (!authSessionCookie) {
    return new Response('Unauthorized', { status: 401 });
  }

  try {
    // 手动配置Auth存储,让它读取我们提取的会话Cookie
    Auth.configure({
      storage: {
        getItem: () => authSessionCookie,
        setItem: () => {}, // 不需要写入,只读即可
        removeItem: () => {}
      }
    });

    const user = await Auth.currentAuthenticatedUser();
    // 这里可以获取user的令牌,附加到API Gateway请求中
    return new Response(JSON.stringify({ userId: user.username, token: user.signInUserSession.idToken.jwtToken }), {
      status: 200,
      headers: { 'Content-Type': 'application/json' }
    });
  } catch (err) {
    console.error('获取用户失败:', err);
    return new Response('Failed to authenticate user', { status: 500 });
  }
}

2. 切换到Node.js Runtime(可选)

App Router的API路由默认使用Edge Runtime,某些Amplify的SSR方法可能依赖Node.js API。在路由文件顶部添加以下代码强制使用Node.js Runtime:

export const runtime = 'nodejs';

3. 更新Amplify到最新版本

旧版aws-amplify可能未适配Next.js App Router,执行更新命令:

npm update aws-amplify
# 或
yarn upgrade aws-amplify

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:25:00