CognitoIdentityServiceProvider.signUP()不接受用户池ID?

时间:2019-04-12 04:34:07

标签: node.js amazon-web-services amazon-cognito

在aws-sdk cognito文档中,列出了一个名为signUp()的函数,该函数引用“在指定的用户池中注册用户并创建用户名,密码和用户属性”。但是,没有用于用户池ID的参数。如何确切地指定他们要添加到的用户池?乍一看,它以为可能只是文档中没有了,但我尝试将UserPoolId作为属性添加到parameters对象中,对此它响应有关意外字段的错误。也没有函数参数接受池ID。我唯一的其他猜测是,CognitoIdentityServiceProvider对象可能在其构造函数中接受了它,但事实并非如此。我知道API还提供了AdminCreateUser()函数来添加用户,但是如果有更好的方法,则不想使用它。

文档https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#signUp-property

有什么想法吗?

2 个答案:

答案 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));
}

enter image description here