簡體   English   中英

ASP.NET身份EF中的動態用戶聲明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM