在aws-sdk cognito文档中,列出了一个名为signUp()
的函数,该函数引用“在指定的用户池中注册用户并创建用户名,密码和用户属性”。但是,没有用于用户池ID的参数。如何确切地指定他们要添加到的用户池?乍一看,它以为可能只是文档中没有了,但我尝试将UserPoolId作为属性添加到parameters对象中,对此它响应有关意外字段的错误。也没有函数参数接受池ID。我唯一的其他猜测是,CognitoIdentityServiceProvider
对象可能在其构造函数中接受了它,但事实并非如此。我知道API还提供了AdminCreateUser()
函数来添加用户,但是如果有更好的方法,则不想使用它。
有什么想法吗?
答案 0 :(得分:0)
在Amazon Cognito中,用户池ID被视为敏感信息,并且仅在Admin
API调用中使用。 SignUp API调用不是AWS SigV4签名的,它应在浏览器端而不是服务器端运行。
Cognito通过App客户端ID隐式了解您在代码中引用的用户池。因此,您可以使用文档中的代码,并且用户将被添加到您的用户池中,而用户池ID不是API调用中的参数。
答案 1 :(得分:0)
从用户池而不是用户池ID中指定 App客户端ID 。如果您还没有,请在用户池上创建一个App Client。 https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html
AWS Cognito文档中未将App Client ID视为秘密(但是App Client Secret当然是-绝不在客户端任何位置包含该密码)。我已经删除了我的App客户端ID,只是为了不在此处广播。
import {
CognitoIdentityServiceProvider
} from 'aws-sdk'
// make sure to use the same region as your user pool
const cognitoIdentityServiceProvider =
new CognitoIdentityServiceProvider({region: 'us-west-2'})
try {
const signUpResp =
await cognitoIdentityServiceProvider.signUp({
// Not UserPool ID but the ID for the "App Client" you have created on the User Pool
ClientId: '5orf...i67r',
Password: pw,
Username: email // i'm using email address for Username
}
).promise()
console.log(signUpResp)
} catch(e) {
alert(e.message || JSON.stringify(e));
}