Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Apr 18, 2024

User attribute validation

You can use defineAuth and defineFunction to create a Cognito pre sign-up Lambda trigger that extends the behavior of sign-up to validate attribute values.

To get started, create a new directory and a resource file, amplify/auth/pre-sign-up/resource.ts. Then, define the function with defineFunction:

amplify/auth/pre-sign-up/resource.ts
import { defineFunction } from '@aws-amplify/backend';
export const preSignUp = defineFunction({
name: "pre-sign-up"
});

Next, create the corresponding handler file, amplify/auth/pre-sign-up/handler.ts, file with the following contents:

amplify/auth/pre-sign-up/handler.ts
import type { PreSignUpTriggerHandler } from "aws-lambda"
function isOlderThan(date: Date, age: number) {
const comparison = new Date()
comparison.setFullYear(comparison.getFullYear() - age)
return date.getTime() > comparison.getTime()
}
export const handler: PreSignUpTriggerHandler = async (event) => {
const birthdate = new Date(event.request.userAttributes["birthdate"])
// you must be 13 years or older
if (!isOlderThan(birthdate, 13)) {
throw new Error("You must be 13 years or older to use this site")
}
return event
}

Lastly, set the newly created function resource on your auth resource:

amplify/auth/resource.ts
import { defineAuth } from '@aws-amplify/backend';
import { preSignUp } from './pre-sign-up/resource';
export const auth = defineAuth({
// ...
triggers: {
preSignUp
}
});

After deploying the changes, whenever a user attempts to sign up this handler will verify the submitter's age is above 13 years.