User attributes
Amplify Auth stores user profile information in user attributes. When the default method for user sign-in, Amplify Auth will automatically configure an email
or phoneNumber
attribute that is required for sign-in.
To extend a user profile beyond the default email
or phoneNumber
attribute that is automatically configured when specified in your auth resource's loginWith
property, you can configure attributes with the userAttributes
property:
import { defineAuth } from "@aws-amplify/backend"
export const auth = defineAuth({ loginWith: { // this configures a required "email" attribute email: true, }, userAttributes: { // specify a "birthdate" attribute birthdate: { mutable: true, required: false, } },})
Standard attributes
User attributes are defined as Cognito Standard Attributes. Attributes can be configured to be required for user sign-up in addition to whether the values are mutable. When configuring your resource to allow your users to login with email
, an email must be specified for user sign-up and cannot be changed later. However additional attributes can be configured to be optional, and mutable after sign-up.
Custom attributes
In addition to the provided standard attributes, you can configure Custom Attributes. These are attributes that are typically unique to your use case, such as a tenant ID or a user's display name. Custom attributes are identified by the custom:
prefix:
import { defineAuth } from "@aws-amplify/backend"
export const auth = defineAuth({ loginWith: { // this configures a required "email" attribute email: true, }, userAttributes: { "custom:display_name": { dataType: "String", mutable: true, maxLen: 16, minLen: 1, }, "custom:favorite_number": { dataType: "Number", mutable: true, min: 1, max: 100, }, "custom:is_beta_user": { dataType: "Boolean", mutable: true, }, "custom:started_free_trial": { dataType: "DateTime", mutable: true, }, },})
Unlike standard attributes, custom attributes cannot natively be required for sign-up, however can be codified to require some value by validating user attributes upon sign-up with a pre sign-up trigger.
Custom attributes can also be configured with specific data types. The following data types are supported:
String
Number
Boolean
DateTime
Shown in the snippet above, String
and Number
can be assigned minimum and maximum constraints. This is useful to defer simple validations to the underlying service, although does not extend to complex validations such as matching against a regular expression.