"code": "function (user, context, cb) {\n // Field Mapping, the property is the root attribute and the value is the field name on user_metadata.\n // You can change the value in case you don't have the same name on user_metadata.\n const fieldMapping = {\n family_name: 'family_name',\n given_name: 'given_name',\n name: 'name',\n nickname: 'nickname',\n picture: 'picture'\n };\n\n if (needMigration(user)) {\n const ManagementClient = require('
[email protected]').ManagementClient;\n const management = new ManagementClient({\n domain: auth0.domain,\n token: auth0.accessToken\n });\n\n management.updateUser(\n { id: user.user_id }, generateUserPayload(user), function (err, updatedUser) {\n if ( err ) {\n cb(err);\n } else {\n updateRuleUser(user, updatedUser);\n cb(null, user, context);\n }\n }\n );\n } else {\n cb(null, user, context);\n }\n\n function needMigration(user) {\n if (user.user_metadata) {\n for (const key in fieldMapping) {\n if (user.user_metadata[key]) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function generateUserPayload(user) {\n const payload = { user_metadata: {}};\n const userMetadata = user.user_metadata;\n\n for (const key in fieldMapping) {\n generateUserPayloadField(userMetadata, payload, key, fieldMapping[key]);\n }\n\n return payload;\n }\n\n function updateRuleUser(user, updatedUser) {\n for (const key in fieldMapping) {\n const updatedUserField = updatedUser[fieldMapping[key]];\n if (typeof updatedUserField === 'string') {\n user[fieldMapping[key]] = updatedUserField;\n user.user_metadata[fieldMapping[key]] = null;\n }\n }\n }\n\n function generateUserPayloadField(userMetadata, payload, rootField, metadataField) {\n if (typeof userMetadata[metadataField] === 'string') {\n payload[rootField] = userMetadata[metadataField];\n payload.user_metadata[metadataField] = null;\n }\n }\n}"
0 commit comments