无法使用原生JS调用AWS Cognito,提示AmazonCognitoIdentity未定义
解决「AmazonCognitoIdentity is not defined」错误
这个报错本质是全局的AmazonCognitoIdentity对象没被正确加载,大概率是脚本引入的方式、顺序或者文件本身出了问题,我来帮你一步步修复:
1. 替换正确的SDK文件
你当前引入的aws-cognito-sdk.js是旧版SDK,和你参考的amazon-cognito-identity-js包不匹配。需要换成该包对应的UMD版本文件:
- 如果用本地文件:从
amazon-cognito-identity-js包的dist目录里取出amazon-cognito-identity.min.js放到你的项目静态资源中 - 如果用CDN:可以直接用公开的CDN链接(比如unpkg的稳定版本)
2. 调整脚本加载顺序
amazon-cognito-identity-js依赖AWS SDK的核心模块,必须先加载AWS SDK,再加载cognito的SDK,否则会出现依赖缺失的问题。
修正后的完整HTML示例
<html> <head> <title>Testing AWS Cognito</title> <!-- 先加载AWS SDK --> <script src="https://sdk.amazonaws.com/js/aws-sdk-2.211.1.min.js"></script> <!-- 再加载amazon-cognito-identity-js的UMD版本 --> <!-- 本地文件请替换成你的实际路径 --> <script src="https://unpkg.com/amazon-cognito-identity-js@6.3.1/dist/amazon-cognito-identity.min.js"></script> </head> <body> <div> <input type="text" id="email" name="email" placeholder="email"> <br/> <input type="password" id="password" name="password" placeholder="password"> <br/> <button onclick="handleSignUp()">Sign Up</button> </div> <script> // 现在可以正常访问AmazonCognitoIdentity全局对象了 function handleSignUp() { const email = document.getElementById('email').value; const password = document.getElementById('password').value; // 替换成你的Cognito用户池ID和客户端ID const poolData = { UserPoolId: 'us-east-1_xxxxxxxxx', ClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx' }; const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); const userAttrs = [ new AmazonCognitoIdentity.CognitoUserAttribute({ Name: 'email', Value: email }) ]; userPool.signUp(email, password, userAttrs, null, (err, result) => { if (err) { alert(err.message || JSON.stringify(err)); return; } console.log('注册成功,用户名:', result.user.getUsername()); }); } </script> </body> </html>
额外排查点
- 打开浏览器开发者工具(F12)的「网络」标签,确认所有脚本都成功加载(没有404错误)
- 如果是npm安装的包,确保已将
node_modules/amazon-cognito-identity-js/dist/amazon-cognito-identity.min.js复制到项目静态资源目录,路径配置正确 - 尽量保持AWS SDK和
amazon-cognito-identity-js版本兼容,避免跨版本冲突
内容的提问来源于stack exchange,提问作者murvinlai
相关产品推荐
相关产品推荐

