UserManager.CheckPasswordAsync始终返回失败

时间:2019-03-13 19:07:42

标签: c# winforms entity-framework asp.net-identity

我在Winforms项目中使用AspNet.Identity。我已经通过传入的UserManager.FindByNameAsync用户名成功找到了用户,但是我无法使用传入的密码登录。我可以使用相同的数据库和相同的凭据在我的MVC应用程序中正常登录。

这是我的代码:

public async Task<List<string>> VerifyUserNamePassword(string userName, string password)
    {
        var usermanager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new IdentityFrameworkDbContext()));

        var user = await usermanager.FindAsync(userName, password);

        //This is ALWAYS NULL!
        if (user != null) 
            label1.Text = "Success!";

        var u = await usermanager.FindByEmailAsync(userName);

        if (u != null)
        {
            //This works up to this point - check if password is correct

            var success = await usermanager.CheckPasswordAsync(u, password);

            //THIS IS ALWAYS FALSE!
            if (success)
                label1.Text = "YES THIS WORKED!";
        }            

        //This works, I get the Roles back and they are correct
        var users = await usermanager.GetRolesAsync(u.Id);

        return users.ToList();
    }

1 个答案:

答案 0 :(得分:0)

密码散列取决于app.config或web.config中的这些设置。

<li>

如果不存在,将使用框架machine.config中的设置。如果希望多个应用程序或部署使用同一数据库,则必须在这些部署中提供相同的值。

如果您已经拥有一个正在运行的aps.net实例,则应该将值从<system.web> <machineKey decryption="" decryptionKey="" validation="" validationKey="" /> </system.web> 复制到Windows窗体的web.config或Web服务器上的machine.config中。