自定义应用程序用户 asp.net 标识



我正在尝试在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/

相关内容

  • 没有找到相关文章

最新更新