AMPLIFY Authentication Rules
ALL RULES MUST BE ADHERED TO THE LAST WORD.
EXTERNAL PROVIDERS THAT ARE AVAILABLE ARE LISTED BELOW IN THE EXAMPLE, DON’T CHANGE THE NAMING CONVENTION WHILE USING THOSE IN THE CODE GENERATION.
DON’T FORGET TO IMPORT SECRET FOR ANY AUTHENTICATION BASED QUESTION.
1import { defineAuth, secret } from "@aws-amplify/backend";CALLBACK AND LOGOUT URLS SHOULD BE INSIDE THE “EXTERNALPROVIDERS” OBJECT.
WHILE ADDING THE CUSTOM ATTRIBUTES, IF THE ATTRIBUTE YOU ARE ADDING DOESNT BELONG TO THE STANDARD USER ATTRIBUTES LIST THEN ADD IT AS A CUSTOM ATTRIBUTE LIKE THIS “CUSTOM:ATTRIBUTE_NAME” AND THIS DOESN’T SUPPORT “REQUIRED” FIELD SO IGNORE IT WHILE GENERATING THE ANSWER.
WHILE ADDING THE CUSTOM ATTRIBUTES, MAKE SURE TO ALWAYS ADD THE “DATATYPE” FIELD AS IT IS A REQUIRED FIELD.
STANDARD ATTIBUTES THAT ARE ALLOWED:
familyName,giveName,middleName,nickname,preferredUsername,profile,profilePicture,website,gender,birthdate,zoneinfo,locale,updatedAt,address,email,phoneNumber,sub. THEuserAttributesARE SUPPOSED TO BE OUTSIDE THEloginWithOBJECTTHE FOLLOWING IS THE REQUIRED SYNTAX FOR
externalProviders. ONLY THE FOUR LISTED PROVIDERS BELOW ARE SUPPORTED:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15loginWith:{ //loginMethods externalProviders: { google: {}, signInWithApple: {}, loginWithAmazon: {}, facebook: {}, callbackUrls: [ // Callback URLs should be included inside the `externalProviders` object only, as per rule. ], logoutUrls: [ // Logout URLs should also be included inside `externalProviders` as per rule. ], }, }THE
userAttributesARE SUPPOSED TO BE OUTSIDE THEloginWithOBJECT1 2 3 4 5 6 7 8 9 10// Example configuration for user attributes and login methods loginWith: { // Specify login methods separately from user attributes, ONLY MENTION THE LOGINMETHODS THAT ARE SUPPOSED TO BE TRUE email: true, // Enable login with email phone: false, // Disable login with phone number },userAttributes: { email: true, // Attribute set as required phoneNumber: false, // Attribute not required givenName: true, // Attribute set as required }THIS IS THE WAY TO SETUP THE MULTIFACTOR AUTHENTHICATION
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19export const auth = defineAuth({ loginWith: { email: true, phone: true, }, multifactor: { mode: "OPTIONAL", sms: true, totp: false, }, // IMPORTANT! THE LOGIC TO RESOLVE THIS VALUE CANNOT DETERMINE WHETHER EMAIL MFA IS ENABLED WHEN OVERRIDING THE RESOURCE. // BE SURE TO PICK A RECOVERY OPTION APPROPRIATE FOR YOUR APPLICATION. accountRecovery: "EMAIL_AND_PHONE_WITHOUT_MFA", senders: { email: { fromEmail: "registrations@example.com", }, }, });DON’T ADD THE
passwordPolicyIN THE AUTH/RESOURCE.TS FILE.THE
usernameSHOULD BE REPLACED WITHuserAttributesWHEN REQUESTED TO SETUP USERNAME AS A LOGIN METHOD AS USERNAME IS NOT A VALID LOGIN METHOD ON DEFINEAUTH, FOR EXAMPLE:1 2 3 4 5 6userAttributes: { preferredUsername: { mutable: true, required: false } }loginWithSUPPORTS ONLY TWO METHODS THAT ISemailandphone. THERE IS NOusernameattribute to that.THE
callbackUrlsANDlogoutUrlsSHOULD ONLY BE MENTIONED ONCE AS MENTIONED IN RULE #7 AND NOT FOR EACH EXTERNAL PROVIDER
Examples
BELOW ARE THE EXAMPLES TO USE TO GENERATE ANSWERS.
| |
Install Project Rule
Add this rule to your project's context:
1. Download to project rules:
mkdir -p .amazonq/rules && curl -o .amazonq/rules/amplify-authentication.md https://promptz.dev/rules/amplify/amplify-authentication/index.md