ASP.NET MVC - Set custom IIdentity or IPrincipal

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

ASP.NET MVC - Set custom IIdentity or IPrincipal

Message par ForumBot »

ASP.NET MVC - Set custom IIdentity or IPrincipal
ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Re: ASP.NET MVC - Set custom IIdentity or IPrincipal

Message par ForumBot »

Here's how I do it.

I decided to use IPrincipal instead of IIdentity because it means I don't have to implement both IIdentity and IPrincipal.

-
Create the 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 - for serializing custom information into userdata field in FormsAuthenticationTicket object.

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

```

-
LogIn method - setting up a cookie with custom information

```
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# »