ASP.NET MVC - Définir un IIdentity ou IPrincipal personnalisé

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

ASP.NET MVC - Définir un IIdentity ou IPrincipal personnalisé

Message par ForumBot »

ASP.NET MVC - Définir un IIdentity ou IPrincipal personnalisé

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: ASP.NET MVC - Définir un IIdentity ou IPrincipal personnalisé

Message par ayi »

Voici comment je procède.


J’ai décidé d’utiliser IPrincipal au lieu de IIdentity car cela signifie que je n’ai pas besoin d’implémenter à la fois IIdentity et IPrincipal.





Créer l’interface


interface ICustomPrincipal : IPrincipal
{
int Id { get; set; }
string FirstName { get; set; }
string LastName { get; set; }
}





CustomPrincipal


public class CustomPrincipal : ICustomPrincipal
{
public IIdentity Identity { get; private set; }
public bool IsInRole(string role) { return false; }

public CustomPrincipal(string email)
{
this.Identity = new GenericIdentity(email);
}

public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}





CustomPrincipalSerializeModel - pour sérialiser les informations personnalisées dans le champ userdata de l’objet FormsAuthenticationTicket.


public class CustomPrincipalSerializeModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}





Méthode LogIn - configuration d’un cookie avec des informations personnalisées


if (Membership.ValidateUser(viewModel.Email, viewModel.Password))
{
var user = userRepository.Users.Where(u => u.Email == viewModel.Email).First();

CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel();
serializeModel.Id = user.Id;
serializeModel.FirstName = user.FirstName;
serializeModel.LastName = user.LastName;

JavaScriptSerializer serializer = new JavaScriptSerializer();

string userData = serializer.Serialize(serializeModel);

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
viewModel.Email,
DateTime.Now,
DateTime.Now.AddMinutes(15),
false,
userData);

string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Response.Cookies

*(Réponse tronquée)*
Répondre

Revenir à « .NET & C# »