在Asp.Net Identity 2中构建自定义用户检查密码

mig*_*eia 4 c# asp.net-mvc asp.net-identity-2

我需要在asp.net MVC 5中实现的应用程序中使用Asp.Net Identity 2构建自定义用户密码检查.

我在stackoverflow帖子中写道(在Identity 2.1中编写自定义IUserPasswordStore和SignInManager.PasswordSignInAsync),我只需要覆盖UserManager中的CheckPasswordAsync方法.

我尝试在IdentityConfig.cs文件中覆盖此方法.以下是我添加到ApplicationUserManager类的代码,仅用于测试此解决方案:

public override async Task<bool> CheckPasswordAsync(ApplicationUser user,   string password)
{
        return await Task.Run(() => {
            return true;
        });
}
Run Code Online (Sandbox Code Playgroud)

问题是此代码永远不会在登录过程中运行,并且登录始终失败.要登录用户我正在使用SignInManager.PasswordSignInAsync登录用户,这是在asp.net MVC 5中创建新的Web应用程序时的默认设置.此方法不应该调用ApplicationUserManager.CheckPasswordAsync?或者这项工作还需要另一种配置吗?

Lef*_*tyX 8

它应该工作.我刚刚使用了标准的ASP.NET MVC模板,通过NuGet更新了所有涉及的库,它必须工作.

我想问题是你重写方法的方式.

在ApplicationUserManager尝试更改代码时,请执行以下操作:

public override Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
    return Task.FromResult<bool>(true);
}
Run Code Online (Sandbox Code Playgroud)

要么:

public override Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
    return Task.Run(() => MyCheckPasswordAsync());
}

private bool MyCheckPasswordAsync()
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

你会看到它通过:

在此输入图像描述


mig*_*eia 5

问题是我试图使用系统中不存在的用户登录。

SignInManager.PasswordSignInAsync 永远不会调用 ApplicationUserManager。如果用户存储库中不存在,则检查PasswordAsync。

总之,我必须将用户存储在我的应用程序中或实现自定义用户存储机制。