2 votes

Utilisation de SitecoreUser.Profile avec l'authentification des formulaires

Nous utilisons Sitecore pour gérer nos utilisateurs enregistrés (domaine extranet) et lorsque nous créons de nouveaux utilisateurs virtuels, nous leur attribuons une adresse électronique en utilisant l'attribut Profile.Email et ensuite appeler le Profile.Save() méthode. Une autre propriété, quelque part ailleurs, lit le userProfile.Email tout va bien au début. De plus, nous utilisons l'authentification par formulaire avec la fonction "Remember me". Le problème est que lorsque nous fermons le navigateur et le rouvrons Sitecore.Context.User contient des informations sur l'utilisateur réel qui a cliqué pour se souvenir de moi mais le User.Profile a toujours l'Email null. J'ai essayé Reload() y initialize() ils ne fonctionnent pas. J'ai également essayé de récupérer l'utilisateur via le nom d'utilisateur ( User.FromName() ) mais l'objet utilisateur renvoyé n'a pas non plus l'email de profil.

Qu'est-ce qui est mal fait ?

2voto

Anton Points 1645

Il y a une remarque très importante dans Livre de recettes de l'API de sécurité . Il est lié à Sitecore 6 mais pour autant que je sache, il devrait fonctionner avec Sitecore 8 car il n'y a pas eu de changements importants dans le modèle de sécurité. Il a fonctionné pour Sitecore 7 .

Important Vous ne devez connecter un utilisateur virtuel qu'après avoir affecté Rôles y Profil les propriétés de ces derniers. Le site Rôles et profil Les propriétés qui sont attribuées après la connexion sont perdues lors d'une demande ultérieure.

Sitecore.Security.Accounts.User user =
Sitecore.Security.Authentication.AuthenticationManager.BuildVirtualUser(@"domain\user"
, true);
if (user != null)
{
 string domainRole = @"domain\role";
 if (Sitecore.Security.Accounts.Role.Exists(domainRole))
 {
 user.Roles.Add(Role.FromName(domainRole));
 }

 user.Profile.Email = "user@domain.com";
 user.Profile[“Custom Property”] = “Custom Value”;
 user.Profile.Save();
 Sitecore.Security.Authentication.AuthenticationManager.LoginVirtualUser(user);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X