I am currently running an auth0 automatic migration proccess.
When user logs in, the following script is ran by auth0:
function login(username, password, callback) {
const request = require('request');
const namespace = '*****';
request.get({
url: 'https://********/api/profile',
auth: {
username: username,
password: password
}
//for more options check:
//https://github.com/mikeal/request#requestoptions-callback
}, function(err, response, body) {
if (err) return callback(err);
if (response.statusCode === 401) return callback();
const user = JSON.parse(body);
callback(null, {
user_id: user.user_name.toString(),
email: user.email,
first_name: user.first_name,
last_name: user.last_name,
position: user.position,
organization: user.organization,
phone_number: user.phone_number,
icon_url: user.icon_url
});
});
}
The problem is, I can only attach fields to idtoken only from user_metadata (or app_metadata), and those fields set on post-login script showed above aren’t set on user_metadata.
My question is: How do I set those fields to user_metadata on that script?
Hi @dudumonteiro,
Thanks for reaching out to the Auth0 Community!
I understand that you would like to append data to the user’s user_metadata automatically when they migrate.
Since users that automatically migrate need to log in at least once, I recommend using a Post-Login Action script to add user_metadata to the user’s profile.
For example:
/**
* @param {Event} event - Details about the user and the context in which they are logging in.
* @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.
*/
exports.onExecutePostLogin = async (event, api) => {
api.user.setUserMetadata("favorite_color", "blue");
};
Hoped this helps!
Please do let me know if you have any additional questions.
Thank you.
Hi @rueben.tiow ,
Thanks for replying.
Unfortunately, I have already tested that Post-Login Action, and didn´t work. I need an actual value from migrated user, not a constant, like “blue”.
exports.onExecutePostLogin = async (event, api) => {
const namespace = 'https://*********';
const p_org = event.user.organization; // it seems this value is null but it appears on auth0 dashboard
if (event.authorization) {
api.idToken.setCustomClaim(`${namespace}/user_metadata.organization`, p_org);
}
};
Hi @dudumonteiro,
Thank you for your response.
Have you made sure that your namespaces follow the guidelines explained in our Create Custom Claims documentation?
Moreover, the event.user.organization
is not a callable property. Instead, use the event.organization
property in your Action script.
See here for the complete list of Event Objects callable in a Post Login Action.
Please let me know how this goes.
Thank you.
1 Like