有没有办法设置当用户在项目启动时更改密码时不允许相同密码的身份核心?



有没有办法设置当用户在项目启动时更改密码时不允许相同密码的身份核心? 我不想用 IF 子句检查它,我想在身份核心选项或类似的地方设置以在我的项目中全局管理它(使用 C# ASP.net 核心(

首先,您必须将以前的密码哈希分别存储在表中。然后 您将需要实现自己的密码验证器并注册它,它应该覆盖 asp.net 核心标识的默认密码验证器。

  1. Microsoft.AspNetCore.Identity.IPasswordValidator实现为

    public class MyPasswordValidator: IPasswordValidator
    {
    public Task<IdentityResult> ValidateAsync(UserManager<TUser> manager, TUser user, string password)
    {
    // custom validation logic
    // search for previous passwords based on user's id and see if they match
    }
    }
    
  2. 在服务中注册它。请确保在注册所有默认 asp.net 标识标识服务后将其放置在。

    services.AddScoped<IPasswordValidator<ApplicationUser>, MyPasswordValidator>();
    

您还可以为ApplicationUser类中的先前密码实现其他属性,以便所有以前的密码都已存在于user变量中

您不需要在 User 类中具有函数即可轻松访问它,因为密码更改应该只允许在 1 页中,因此检查的代码也可以存在于该页面上(模型/控制器(。

最简单的方法是显而易见的 - 在密码更改控制器中,您必须以纯文本形式收集旧密码和新密码 - 那么为什么不比较它们呢? :D

不太简单的方法:只需在密码更改控制器中使用signInManager.CheckPasswordSignInAsync(如果由于某种原因您没有旧密码作为纯文本(,在更改通行证之前。如果成功了,你就会知道新通行证是一样的。

最佳方法:[检查旧密码以防止在先设置新密码后设置相同密码,然后重置为旧密码(相同(]密码 身份核心的历史记录

最新更新