[英]Dynamic User Claims in ASP.NET Identity EF
我正在开发一个使用ASP.NET Identity with Entity Framework的身份验证系统,我希望有一些声明是计算值,而不是硬编码到声明表中。
当用户登录时,如何在不将实际添加到声明表的情况下向该登录会话添加动态声明?
例如,我可能想要存储每个用户的DOB,但是如果登录日期与用户的DOB匹配,我想要添加IsBirthday作为声明。 我不想为每个用户存储“IsBirthday”声明,因为它每天都会为每个用户更改。
在我的代码中,我用它来登录:
var signInResult = await SignInManager.PasswordSignInAsync(username, password, false, false);
调用此方法后,我可以引用ClaimsPrincipal,但Claims属性是IEnumerable,而不是List,所以我无法添加它。
编辑:我还应该提到我正在使用Microsoft.AspNet.Identity.Owin库。
好的,大家,我做了一些挖掘ASP.NET Identity中提供的类,找到了我需要覆盖的类。 SignInManager类有一个CreateUserIdentityAsync方法,它完全符合我的要求。 以下代码将IsBirthday声明添加到我的标识中,但未将其存储在数据库中。
public class ApplicationSignInManager : SignInManager<ApplicationUser, string>
{
public override async Task<System.Security.Claims.ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user)
{
var identity = await base.CreateUserIdentityAsync(user);
identity.AddClaim(new System.Security.Claims.Claim("IsBirthday", user.DOB.GetShortDateString() == DateTime.Now.GetShortDateString()));
return identity;
}
// ... EXCLUDING OTHER STUFF LIKE CONSTRUCTOR AND OWIN FACTORY METHODS ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.