AWS Amplify部署NextJS应用遇Next-AUTH UNTRUST_HOST_ERROR求助
解决NextAuth在AWS Amplify上的UNTRUST_HOST_ERROR错误
核心原因
UNTRUST_HOST_ERROR是NextAuth的安全限制机制,仅允许预定义的可信主机处理认证请求,你的Amplify域名未被识别为可信主机。以下是针对性修复步骤:
1. 确保NEXTAUTH_URL环境变量配置正确
- 在AWS Amplify控制台的环境变量页面,添加
NEXTAUTH_URL,值为你的完整应用URL:https://master.dtzbr8sfj0q7k.amplifyapp.com/ - 注意:不要在Build Settings的build命令里手动赋值(当前写法仅在构建shell中生效,运行时无法被NextJS读取),必须通过Amplify控制台配置环境变量,NextJS会自动注入到
process.env中。
2. 配置NextAuth信任主机
在/pages/api/[...nextauth].js中,给NextAuth添加信任主机配置:
export default NextAuth({ providers: [/* 你的Cognito配置 */], secret: process.env.JWT_SECRET, // 添加以下配置二选一即可 trustHost: true, // 允许所有主机(适合Amplify这类托管平台) // 或者更严格的指定方式: // allowedHosts: ["master.dtzbr8sfj0q7k.amplifyapp.com"], callbacks: { /* 你的回调函数 */ } });
3. 修正Cognito Provider的issuer配置
你的Cognito Provider的issuer参数配置错误,必须使用Cognito用户池的OIDC issuer URL,格式为:https://cognito-idp.{你的区域}.amazonaws.com/{你的用户池ID}
- 该地址可在Cognito控制台的用户池「App integration」→「Domain name」页面获取。
修正后的Provider配置:
CognitoProvider({ clientId: process.env.COGNITO_CLIENT_ID, clientSecret: process.env.COGNITO_CLIENT_SECRET, issuer: process.env.COGNITO_ISSUER_URL, // 改用正确的issuer URL }),
同时在Amplify环境变量中添加COGNITO_ISSUER_URL并填入对应值。
4. 验证Cognito回调URL的完整性
确保Cognito用户池的「App client settings」里的回调URL包含完整的NextAuth回调路径:https://master.dtzbr8sfj0q7k.amplifyapp.com/api/auth/callback/cognito
不要只填写根域名,必须包含完整的回调路径。
5. 修复Build Settings的无效配置
删除Build Settings中build阶段的环境变量赋值语句,这些语句无法将变量注入NextJS运行环境:
version: 1 applications: - frontend: phases: preBuild: commands: - npm ci build: commands: - npm run build # 仅保留build命令,环境变量通过Amplify控制台配置 artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/* appRoot: client
6. 修正登录按钮的代码错误
你的index.js中登录按钮的点击事件存在未定义的e变量,会导致登录失败:
onClick={(e) => { e.preventDefault(); signIn("cognito", { callbackUrl: process.env.NEXTAUTH_URL, }); }}
完成以上步骤后重新部署应用,UNTRUST_HOST_ERROR即可解决。
内容的提问来源于stack exchange,提问作者Arihant Jain
相关产品推荐
相关产品推荐

