ASP.NET Core Identity - Создание пользователя "вручную" и предоставление хэша пароля - Как правильно генерировать хэш? - PullRequest
0 голосов
/ 01 октября 2019

Я должен создать пользователя вручную:

var user = new User
{
    Name = "Joe",
    Email = "test@****.com",
    PasswordHash = "gdfgdfgre2132143xcxzvb=="
}

context.Users.Add(user);

, но дело в том, что когда я пытаюсь войти в эту учетную запись, мой пароль не работает.

Я скопировал парольхеш учетной записи пользователя, который я знаю пароль для , а затем я вставил его этому новому пользователю и попытался использовать тот же пароль, и он не работал - password sign in failed

Так что я хотел бы спросить -что не так с моей логикой здесь и как я могу заставить ее работать?

Это связано с SecurityStamp?

1 Ответ

2 голосов
/ 01 октября 2019

Если вы хотите добавить пользователя вручную, вы также должны установить свойство NormalizedUserName. Кроме того, для хеширования паролей лучше использовать IPasswordHasher<TUser> Interface:

Закачиваемые сервисы:

private readonly ApplicationDbContext _context;
public readonly IPasswordHasher<IdentityUser> _passwordHasher;

public HomeController( ApplicationDbContext dbContext, IPasswordHasher<IdentityUser> _passwordHasher)
{

    this._context = dbContext;
    this._passwordHasher = _passwordHasher;

}

Я предполагаю, что ваш User наследует IdentityUser, здесь я использую IdentityUserнапример:

IdentityUser applicationUser = new IdentityUser();
Guid guid = Guid.NewGuid();
applicationUser.Id = guid.ToString();
applicationUser.UserName = "Joe";
applicationUser.Email = "wx@hotmail.com";
applicationUser.NormalizedUserName = "wx@hotmail.com";

_context.Users.Add(applicationUser);


var hasedPassword = _passwordHasher.HashPassword(applicationUser, "YourPassword");
applicationUser.SecurityStamp = Guid.NewGuid().ToString();
applicationUser.PasswordHash = hasedPassword;

_context.SaveChanges();

Вы также можете использовать UserManager.CreateAsync для создания указанного пользователя в резервном хранилище с заданным паролем:

var user = new IdentityUser { UserName = "Joe", Email = "wx@hotmail.com" };
var result = await _userManager.CreateAsync(user, "YourPassWord");
if (result.Succeeded)
{

}

Примечание: вы должны указать значение Emailво время входа в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...