如何以编程方式在 Cognito 用户池中创建用户?
How can you programmatically create a user in a Cognito User Pool?
AWS 文档表明管理员可以使用 API 在 AWS Cognito 中创建用户池用户。
这是我所指的文档:https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html
但是文档提供的细节很少,甚至没有提供如何完成的示例。它没有提到要调用什么端点、要使用什么 SDK 函数或任何有关身份验证的内容等。
有没有人有直接从您的代码创建新用户的经验?
这是一个使用 python/Flask
的例子
import traceback
import boto3
from flask import Flask, render_template, request
app = Flask(__name__)
def cognito_register_user(email):
print("sign up user: ", email)
try:
aws_client = boto3.client('cognito-idp', region_name = "us-west-2",)
response = aws_client.admin_create_user(UserPoolId="us-west-2_sdfgsdfgsdfg",Username=email,UserAttributes=[{"Name": "email","Value": email},{ "Name": "email_verified", "Value": "true" }],DesiredDeliveryMediums=['EMAIL'])
print("response=", response)
return response
except:
traceback.print_exc()
return None
@app.route('/')
def root():
return render_template('register_email.html', title='register mail')
@app.route('/register/email', methods=['POST'])
def sign_up():
if request.method == 'POST':
email = request.form['email']
print("email=", email)
cognito_register_user(email)
return render_template('register_email_complete.html', title='flask test', email=email)
if __name__ == "__main__":
app.run(debug=True)
如果您遵循开发文档 (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html),更具体地说是 "signUp" 函数,实际上很容易。
来自文档:
var params = {
ClientId: 'STRING_VALUE', /* required */
Password: 'STRING_VALUE', /* required */
Username: 'STRING_VALUE', /* required */
AnalyticsMetadata: {
AnalyticsEndpointId: 'STRING_VALUE'
},
SecretHash: 'STRING_VALUE',
UserAttributes: [
{
Name: 'STRING_VALUE', /* required */
Value: 'STRING_VALUE'
},
/* more items */
],
UserContextData: {
EncodedData: 'STRING_VALUE'
},
ValidationData: [
{
Name: 'STRING_VALUE', /* required */
Value: 'STRING_VALUE'
},
/* more items */
]
};
cognitoidentityserviceprovider.signUp(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
使用它,创建用户很简单(Lambda 中的示例,但可以很容易地自行修改为 JS):
'use strict'
var AWS = require('aws-sdk');
var resp200ok = { statusCode: 200, headers: {'Content-Type': 'application/json'}, body: {} };
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});
// ^ Hard to find that this is the way to import the library, but it was obvious in docs
exports.handler = function(event, context, callback){
var params = {
ClientId: 'the App Client you set up with your identity pool (usually 26 alphanum chars)',
Password: 'the password you want the user to have (keep in mind the password restrictions you set when creating pool)',
Username: 'the username you want the user to have',
UserAttributes:[ {
{
Name: 'name',
Value: 'Private'
},
{
Name: 'family_name',
Value: 'Not-Tellinglol'
},
}],
};
cognitoidentityserviceprovider.signUp(params, function(err, data) {
if (err){ console.log(err, err.stack); }
else{ resp200ok.body = JSON.stringify(data); callback(null, resp200ok); }
});
};
您在 Cognito 池设置中设置为 required 的任何内容都必须位于 UserAttributes 部分(通常电子邮件默认为 required ,检查你的是否是)。您可以为其分配值的事物列表位于 (Cognito 池)常规设置 -> 应用程序客户端 -> 显示详细信息 -> 设置 Read/Write ->(事物列表),在这里你可以添加自定义属性(比如你想指定你的用户来自哪个城市,或者你想添加其他任何东西(String/Number))。
为自定义字段赋值时,UserAttributes 中的 "Name" 将为 "custom:whatever",因此如果自定义字段为 "city",则名称为 "custom:city" .
希望我没有说太多显而易见的事情,但这些是我花了一段时间才弄清楚分解的 SO 信息和 AWS 文档,我想我会把它们放在一起.
AWS 文档表明管理员可以使用 API 在 AWS Cognito 中创建用户池用户。
这是我所指的文档:https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html
但是文档提供的细节很少,甚至没有提供如何完成的示例。它没有提到要调用什么端点、要使用什么 SDK 函数或任何有关身份验证的内容等。
有没有人有直接从您的代码创建新用户的经验?
这是一个使用 python/Flask
的例子import traceback
import boto3
from flask import Flask, render_template, request
app = Flask(__name__)
def cognito_register_user(email):
print("sign up user: ", email)
try:
aws_client = boto3.client('cognito-idp', region_name = "us-west-2",)
response = aws_client.admin_create_user(UserPoolId="us-west-2_sdfgsdfgsdfg",Username=email,UserAttributes=[{"Name": "email","Value": email},{ "Name": "email_verified", "Value": "true" }],DesiredDeliveryMediums=['EMAIL'])
print("response=", response)
return response
except:
traceback.print_exc()
return None
@app.route('/')
def root():
return render_template('register_email.html', title='register mail')
@app.route('/register/email', methods=['POST'])
def sign_up():
if request.method == 'POST':
email = request.form['email']
print("email=", email)
cognito_register_user(email)
return render_template('register_email_complete.html', title='flask test', email=email)
if __name__ == "__main__":
app.run(debug=True)
如果您遵循开发文档 (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html),更具体地说是 "signUp" 函数,实际上很容易。
来自文档:
var params = {
ClientId: 'STRING_VALUE', /* required */
Password: 'STRING_VALUE', /* required */
Username: 'STRING_VALUE', /* required */
AnalyticsMetadata: {
AnalyticsEndpointId: 'STRING_VALUE'
},
SecretHash: 'STRING_VALUE',
UserAttributes: [
{
Name: 'STRING_VALUE', /* required */
Value: 'STRING_VALUE'
},
/* more items */
],
UserContextData: {
EncodedData: 'STRING_VALUE'
},
ValidationData: [
{
Name: 'STRING_VALUE', /* required */
Value: 'STRING_VALUE'
},
/* more items */
]
};
cognitoidentityserviceprovider.signUp(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
使用它,创建用户很简单(Lambda 中的示例,但可以很容易地自行修改为 JS):
'use strict'
var AWS = require('aws-sdk');
var resp200ok = { statusCode: 200, headers: {'Content-Type': 'application/json'}, body: {} };
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});
// ^ Hard to find that this is the way to import the library, but it was obvious in docs
exports.handler = function(event, context, callback){
var params = {
ClientId: 'the App Client you set up with your identity pool (usually 26 alphanum chars)',
Password: 'the password you want the user to have (keep in mind the password restrictions you set when creating pool)',
Username: 'the username you want the user to have',
UserAttributes:[ {
{
Name: 'name',
Value: 'Private'
},
{
Name: 'family_name',
Value: 'Not-Tellinglol'
},
}],
};
cognitoidentityserviceprovider.signUp(params, function(err, data) {
if (err){ console.log(err, err.stack); }
else{ resp200ok.body = JSON.stringify(data); callback(null, resp200ok); }
});
};
您在 Cognito 池设置中设置为 required 的任何内容都必须位于 UserAttributes 部分(通常电子邮件默认为 required ,检查你的是否是)。您可以为其分配值的事物列表位于 (Cognito 池)常规设置 -> 应用程序客户端 -> 显示详细信息 -> 设置 Read/Write ->(事物列表),在这里你可以添加自定义属性(比如你想指定你的用户来自哪个城市,或者你想添加其他任何东西(String/Number))。
为自定义字段赋值时,UserAttributes 中的 "Name" 将为 "custom:whatever",因此如果自定义字段为 "city",则名称为 "custom:city" .
希望我没有说太多显而易见的事情,但这些是我花了一段时间才弄清楚分解的 SO 信息和 AWS 文档,我想我会把它们放在一起.