signUp method
Registers a user with an app client and requests a user name, password, and user attributes in the user pool.
If you have never used SMS text messages with Amazon Cognito or any other
Amazon Web Services service, Amazon Simple Notification Service might
place your account in the SMS sandbox. In sandbox
mode , you can send messages only to verified phone numbers. After
you test your app while in the sandbox environment, you can move out of
the sandbox and into production. For more information, see
SMS message settings for Amazon Cognito user pools in the Amazon
Cognito Developer Guide.
You might receive a LimitExceeded exception in response to
this request if you have exceeded a rate quota for email or SMS messages,
and if your user pool automatically verifies email addresses or phone
numbers. When you get this exception in the response, the user is
successfully created and is in an UNCONFIRMED state.
May throw CodeDeliveryFailureException.
May throw ForbiddenException.
May throw InternalErrorException.
May throw InvalidEmailRoleAccessPolicyException.
May throw InvalidLambdaResponseException.
May throw InvalidParameterException.
May throw InvalidPasswordException.
May throw InvalidSmsRoleAccessPolicyException.
May throw InvalidSmsRoleTrustRelationshipException.
May throw LimitExceededException.
May throw NotAuthorizedException.
May throw OperationNotEnabledException.
May throw ResourceNotFoundException.
May throw TooManyRequestsException.
May throw UnexpectedLambdaException.
May throw UserLambdaValidationException.
May throw UsernameExistsException.
Parameter clientId :
The ID of the app client where the user wants to sign up.
Parameter username :
The username of the user that you want to sign up. The value of this
parameter is typically a username, but can be any alias attribute in your
user pool.
Parameter analyticsMetadata :
Information that supports analytics outcomes with Amazon Pinpoint,
including the user's endpoint ID. The endpoint ID is a destination for
Amazon Pinpoint push notifications, for example a device identifier, email
address, or phone number.
Parameter clientMetadata :
A map of custom key-value pairs that you can provide as input for any
custom workflows that this action triggers. You create custom workflows by
assigning Lambda functions to user pool triggers.
When Amazon Cognito invokes any of these functions, it passes a JSON
payload, which the function receives as input. This payload contains a
clientMetadata attribute that provides the data that you
assigned to the ClientMetadata parameter in your request. In your function
code, you can process the clientMetadata value to enhance
your workflow for your specific needs.
To review the Lambda trigger types that Amazon Cognito invokes at runtime with API requests, see Connecting API actions to Lambda triggers in the Amazon Cognito Developer Guide.
-
Store the
ClientMetadatavalue. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, theClientMetadataparameter serves no purpose. -
Validate the
ClientMetadatavalue. -
Encrypt the
ClientMetadatavalue. Don't send sensitive information in this parameter.
Parameter password :
The user's proposed password. The password must comply with the password
requirements of your user pool.
Users can sign up without a password when your user pool supports passwordless sign-in with email or SMS OTPs. To create a user with no password, omit this parameter or submit a blank value. You can only create a passwordless user when passwordless sign-in is available.
Parameter secretHash :
A keyed-hash message authentication code (HMAC) calculated using the
secret key of a user pool client and username plus the client ID in the
message. For more information about SecretHash, see Computing
secret hash values.
Parameter userAttributes :
An array of name-value pairs representing user attributes.
For custom attributes, include a custom: prefix in the
attribute name, for example custom:department.
Parameter userContextData :
Contextual data about your user session like the device fingerprint, IP
address, or location. Amazon Cognito threat protection evaluates the risk
of an authentication event based on the context that your app generates
and passes to Amazon Cognito when it makes API requests.
For more information, see Collecting data for threat protection in applications.
Parameter validationData :
Temporary user attributes that contribute to the outcomes of your pre
sign-up Lambda trigger. This set of key-value pairs are for custom
validation of information that you collect from your users but don't need
to retain.
Your Lambda function can analyze this additional data and act on it. Your function can automatically confirm and verify select users or perform external API operations like logging user attributes and validation data to Amazon CloudWatch Logs.
For more information about the pre sign-up Lambda trigger, see Pre sign-up Lambda trigger.
Implementation
Future<SignUpResponse> signUp({
required String clientId,
required String username,
AnalyticsMetadataType? analyticsMetadata,
Map<String, String>? clientMetadata,
String? password,
String? secretHash,
List<AttributeType>? userAttributes,
UserContextDataType? userContextData,
List<AttributeType>? validationData,
}) async {
final headers = <String, String>{
'Content-Type': 'application/x-amz-json-1.1',
'X-Amz-Target': 'AWSCognitoIdentityProviderService.SignUp'
};
final jsonResponse = await _protocol.send(
method: 'POST',
requestUri: '/',
exceptionFnMap: _exceptionFns,
signed: false,
// TODO queryParams
headers: headers,
payload: {
'ClientId': clientId,
'Username': username,
if (analyticsMetadata != null) 'AnalyticsMetadata': analyticsMetadata,
if (clientMetadata != null) 'ClientMetadata': clientMetadata,
if (password != null) 'Password': password,
if (secretHash != null) 'SecretHash': secretHash,
if (userAttributes != null) 'UserAttributes': userAttributes,
if (userContextData != null) 'UserContextData': userContextData,
if (validationData != null) 'ValidationData': validationData,
},
);
return SignUpResponse.fromJson(jsonResponse.body);
}