自定义ApplicationUser asp.net-identity

时间:2017-01-19 12:22:18

标签: c# asp.net-identity

我试图在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添加对象列表,还是应该以另一种方式执行此操作?

1 个答案:

答案 0 :(得分:0)

以下是我在Asp.Net Identity实现中阻止使用以前的“X”密码的文章。我调整它以满足我的需要,但这让我得到了所需的一切,以便走上正轨。给它一个阅读。

http://www.c-sharpcorner.com/UploadFile/4b0136/how-to-customize-password-policy-in-Asp-Net-identity/