Я работаю с ASP.NET Identity и EF 6.2.
Мой проект состоит в том, чтобы настроить управление пользователями, сохраняя изменение пароля пользователя.
Мой код ссылки по этой ссылке: https://blogs.msdn.microsoft.com/webdev/2014/01/06/implementing-custom-password-policy-using-asp-net-identity
Поэтому я добавил новую таблицу AspNetCustomUserPreviousPasswords для хранения пароля для смены пользователя:
public class AspNetCustomUserPreviousPasswords
{
public AspNetCustomUserPreviousPasswords()
{
CreatedDate = DateTime.Now;
}<br>
DatabaseGenerated(DatabaseGeneratedOption.Identity), Key, Column(Order = 0)
public int Id { get; set; }
[Column(Order = 1)]<br>
[MaxLength(128)]
[Required]
public string HashPassword { get; set; }<br>
[Column(Order = 2)]
[Required]
public DateTime CreatedDate { get; set; }<br>
[Key, Column(Order = 3)]
public string UserId { get; set; }
public virtual ApplicationUser User { get; set; }
}
затем я обновил свой код в ApplicationUser.cs для использования контекста Identity DB и управления паролем запроса пользователя:
public class ApplicationUser : IdentityUser
{
public ApplicationUser() : base()
{
UserPreviousPasswords = new List<code><AspNetCustomUserPreviousPasswords>();
}
общедоступный виртуальный IList UserPreviousPasswords {get; задавать; }
публичная асинхронная задача GenerateUserIdentityAsync (менеджер UserManager, строка authenticationType)
{
var userIdentity = await manager.CreateIdentityAsync (this, authenticationType);
// Добавить пользовательские заявки здесь
вернуть userIdentity;
}
}
public override async Task ChangePasswordAsync (строка userId, строка currentPassword, строка newPassword)
{
if (ожидайте IsPreviousPassword (userId, newPassword))
{
return await Task.FromResult (IdentityResult.Failed («Невозможно повторно использовать старый пароль»));
}
var result = await base.ChangePasswordAsync (userId, currentPassword, newPassword);
если (результат. Успешно)
{
var store = Сохранить как ApplicationUserStore;
ожидание store.AddToPreviousPasswordsAsync (ожидание FindByIdAsync (userId), PasswordHasher.HashPassword (newPassword));
}
вернуть результат;
}
приватная асинхронная задача IsPreviousPassword (строка userId, строка newPassword)
{
var user = await FindByIdAsync (userId);
if (user.UserPreviousPasswords.OrderByDescending (x => x.CreatedDate).
Выберите (x => x.HashPassword) .Take (PASSWORD_HISTORY_LIMIT) .Where (x => PasswordHasher.VerifyHashedPassword (x, newPassword)! = PasswordVerificationResult.Failed).
Любой())
{
вернуть истину;
}
вернуть ложь;
}
Итак, в задании IsPreviousPassword var user = await FindByIdAsync(userId);
Пользователь var не загружает пароль из свойства UserPreviousPasswords:
введите описание изображения здесь
Что я не так? Мне нужно загрузить пароль истории в UserPreviousPasswords, когда найти пользователя.