Excepción en Site.createExternalUser en Apex RESTclass: Site.ExternalUserCreateException: [Esa operación solo está permitida desde dentro de un sitio activo].
Tengo un sistema de autenticación que no es de Salesforce que contiene nombres de usuario y contraseñas para algunos miles de usuarios. Estoy dispuesto a migrar estos usuarios a Salesforce y darles acceso a mi sitio Experience Cloud. Estoy desarrollando un recurso REST Apex que tomará el nombre de usuario y la contraseña como argumentos y creará un usuario con ese nombre de usuario y contraseña con un perfil de comunidad. Planeo llamar a esta API desde mi sistema que no es de Salesforce y migrar todos estos usuarios. Estoy usando el método Site.createExternalUser
en esta API. Estoy recibiendo la excepción Site.ExternalUserCreateException: [Esa operación solo está permitida dentro de un sitio activo.]
. La razón por la que uso Site.createExternalUser
es porque no quiero enviar el correo de bienvenida/cambio de contraseña a mis usuarios ya que se inscribieron con éxito hace mucho tiempo. Estoy abierto a cualquier otra alternativa para lograr esto.
A continuación se muestra mi código:
@RestResource(urlMapping='/createUser/*')
global with sharing class createUserRestResource {
@HttpPost
global static String doPost(){
Contact con=new Contact();
con.Firstname="First";
con.LastName= "Last";
con.Email="first.last@example.com";
con.AccountId='/Agregar aquí un Id de cuenta./';
insert con;
User usr = new User();
usr.Username= "usernameFromRequest@example.com";
usr.Alias= "alias123";
usr.Email= "first.last@example.com";
usr.FirstName= "First";
usr.IsActive= true;
usr.LastName= "Last";
usr.ProfileId='/Id de perfil de usuario de comunidad./';
usr.EmailEncodingKey= 'ISO-8859-1';
usr.TimeZoneSidKey= 'America/Los_Angeles';
usr.LocaleSidKey= 'en_US';
usr.LanguageLocaleKey= 'en_US';
usr.ContactId = con.Id;
String userId = Site.createExternalUser(usr, con.AccountId, 'Password@1234', false);
return userId;
}
}
davy.ai
Solución:
La razón detrás de la excepción
Site.ExternalUserCreateException: [Esa operación solo se permite desde dentro de un sitio activo.]
es que el métodoSite.createExternalUser
solo puede ser llamado desde dentro de un sitio activo o desde el contexto del sitio Experience Cloud. Como la API se está llamando desde un sistema no Salesforce, este método no se puede utilizar para crear usuarios.Para lograr el objetivo de migrar usuarios del sistema de autenticación no Salesforce a Salesforce y proporcionar acceso al sitio Experience Cloud, puedes seguir el siguiente enfoque:
Después de crear el usuario en Salesforce, asigna un perfil de comunidad al usuario. Puedes hacer esto utilizando las API REST de Salesforce o utilizando código Apex.
Una vez que se haya creado el usuario y se le haya asignado un perfil de comunidad, podrá acceder al sitio Experience Cloud utilizando sus credenciales de Salesforce.
Para evitar enviar el correo electrónico de bienvenida/cambio de contraseña a los usuarios, puedes actualizar la configuración del sitio Experience Cloud para que no envíe correos electrónicos de bienvenida/cambio de contraseña a los usuarios recién creados. Esto se puede hacer desde la configuración del sitio.
A continuación se muestra un código de muestra sobre cómo crear un usuario utilizando la API REST:
Nota: Reemplaza ‘tuInstancia’ con la URL de tu instancia de Salesforce y ‘/Community User Profile Id/’ con el Id de perfil de usuario de la comunidad.
Utilizando este enfoque, puedes migrar todos los usuarios del sistema de autenticación no Salesforce a Salesforce y proporcionarles acceso al sitio Salesforce Experience Cloud.