UserManager.CheckPasswordAsync всегда возвращает ошибку - PullRequest
0 голосов
/ 13 марта 2019

Я использую AspNet.Identity с проектом Winforms.Я успешно нахожу пользователя с помощью переданного имени пользователя в 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 голосов
/ 13 марта 2019

Хеширование пароля зависит от этих настроек в app.config или web.config.

<system.web>
  <machineKey decryption="" decryptionKey="" validation="" validationKey="" />
</system.web>

Если их нет, будут использоваться настройки в рамках. Machine.config будет использоваться.Если вы хотите, чтобы несколько приложений или развертываний использовали одну и ту же базу данных, вы должны указать одинаковые значения для этих развертываний.

Поскольку у вас уже есть работающий экземпляр aps.net, вам следует скопировать значения из web.configв app.config формы Windows или из файла machine.config на веб-сервере.

...