我正在开发一个使用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 ... }
原文地址:https://www.jb51.cc/csharp/92753.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。