我正在尝试在MVC中的标准ApplicationUser对象中添加对象列表。
我一直在看几十个关于这个问题的问题,但它们似乎都在添加一个对象,而不是一个列表。
我正在尝试做的是记录用户使用过的所有历史密码,因此我添加了一个名为AspNetUserPreviousPassword
的表。
在我的代码中,我已将以下行添加到ApplicationUser
类中:
public virtual DbSet<AspNetUserPreviousPassword> PreviousUserPasswords { get; set; }
在AspNetUserPreviousPassword
对象中,我添加了以下内容:
public string ApplicationUserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
我创建了以下扩展类:
公共静态类 IdentityExtensions 出现在User.Identity
智能感知中 - 到目前为止一切顺利。
{
public static string GetPreviousUserPasswords(this IIdentity identity)
{
var claim = ((ClaimsIdentity)identity).FindFirst("PreviousUserPasswords");
// Test for null to avoid issues during local testing
return (claim != null) ? claim.Value : string.Empty;
}
}
当我去编辑GenerateUserIdentityAsync
函数以插入自定义声明时,我开始认为我的方法不正确,因为您只能添加字符串,例如
userIdentity.AddClaim(new Claim("PreviousUserPasswords", "This must be a string"));
尽管只能在这里添加一个字符串,但我想测试我以前的密码是从数据库中读取的,所以我添加了以下代码来测试:
string previousPasswords = "";
await this.PreviousUserPasswords.ForEachAsync(p => previousPasswords += p.PasswordHash);
this.PreviousUserPasswords
总是NULL
.
我的问题:
1)为什么this.PreviousUserPasswords
总是NULL
?
2)我的方法是否正确 - 我可以向ApplicationUser
添加对象列表还是应该以另一种方式执行此操作?
这是我用来防止在实现 Asp.Net Identity时使用以前的"X"密码的文章。我调整了它以满足我的需求,但这为我提供了走上正确轨道所需的一切。读一读。
http://www.c-sharpcorner.com/UploadFile/4b0136/how-to-customize-password-policy-in-Asp-Net-identity/