Ultimately this script took care of:
- onExecutePostUserRegistration
- Add user to an org
- Generate password change ticket
- Send org invite with the change password ticket link via {{user.app_metadata.must_reset_password_link}}
/**
- Handler that will be called during the execution of a PostUserRegistration flow.
-
@param {Event} event - Details about the context and user that has registered.
*/
var ManagementClient = require(‘auth0’).ManagementClient;
const logPrefix = "WelcomeAndChangePassword: ";
exports.onExecutePostUserRegistration = async (event) => {
const userId = event.user.user_id;
console.log(logPrefix, userId, “starting”);
const originating_organization_id = event.user.app_metadata.originating_organization_id;
if (!originating_organization_id)
throw new Error(‘Missing 'user.app_metadata.originating_organization_id'’);
const originating_client_id = event.user.app_metadata.originating_client_id;
if (!originating_client_id)
throw new Error(‘Missing 'user.app_metadata.originating_client_id'’);
const auth0MgmtClient = new ManagementClient({
domain: event.tenant.id + ‘.us.auth0.com’,
clientId: event.secrets.auth0MgmtClientId,
clientSecret: event.secrets.auth0MgmtClientSecret,
scope: ‘create:organization_members create:organization_invitations create:user_tickets’,
});
console.log(logPrefix, userId, “adding user to organization”, originating_organization_id);
await auth0MgmtClient.organizations.addMembers({
id: originating_organization_id
}, {
members: [userId]
});
console.log(logPrefix, userId, “creating password change ticket”, originating_organization_id, originating_client_id);
const loginUrl = event.user.app_metadata.login_url;
console.log(logPrefix, userId, “login_url from from user.app_metadata (not used)”, loginUrl);
let passwordChangeTicketResult = await auth0MgmtClient.createPasswordChangeTicket({
//result_url: loginUrl,
organization_id: originating_organization_id,
client_id: originating_client_id,
user_id: userId,
includeEmailInRedirect: true,
mark_email_as_verified: true
});
console.log(logPrefix, userId, “creating organization invitation”, originating_organization_id, originating_client_id);
await auth0MgmtClient.organizations.createInvitation({
id: originating_organization_id
}, {
send_invitation_email: true,
client_id: originating_client_id,
invitee: {
email: event.user.email
},
inviter: {
name: “Inviter”
},
app_metadata: {
must_reset_password_link: passwordChangeTicketResult.ticket
}
});
console.log(logPrefix, userId, “finished”);
};