加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ASP.NET身份EF中的动态用户声明

发布时间:2020-12-15 04:05:37 所属栏目:百科 来源:网络整理
导读:我正在开发一个使用ASP.NET Identity with Entity Framework的身份验证系统,我希望有一些声明是计算值,而不是硬编码到声明表中. 当用户登录时,如何在不将实际添加到声明表的情况下向该登录会话添加动态声明? 例如,我可能想要存储每个用户的DOB,但是如果登录
我正在开发一个使用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 ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读