我试图在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
intellisense中 - 到目前为止一直很好。
{
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
添加对象列表,还是应该以另一种方式执行此操作?
答案 0 :(得分:0)
以下是我在Asp.Net Identity实现中阻止使用以前的“X”密码的文章。我调整它以满足我的需要,但这让我得到了所需的一切,以便走上正轨。给它一个阅读。
http://www.c-sharpcorner.com/UploadFile/4b0136/how-to-customize-password-policy-in-Asp-Net-identity/