Я пытаюсь добавить список объектов в стандартный объект ApplicationUser в MVC.Настройка ApplicationUser asp.net-identity
Я смотрю на десятки вопросов об этом, но все они, кажется, добавляют один объект, а не список.
Что я пытаюсь сделать, это записать все исторические пароли, которые пользователь использовал, поэтому я добавил таблицу под названием AspNetUserPreviousPassword
.
В моем коде я добавил эту строку в ApplicationUser
класс:
public virtual DbSet<AspNetUserPreviousPassword> PreviousUserPasswords { get; set; }
и внутри AspNetUserPreviousPassword
объекта я добавил следующее:
public string ApplicationUserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
Я создал следующие extensions class:
открытый статический класс IdentityExtensions, который появился в User.Identity
intellisense - пока все хорошо.
{
public static string GetPreviousUserPasswords(this IIdentity identity)
{
var claim = ((ClaimsIdentity)identity).FindFirst("PreviousUserPasswords");
// Test for null to avoid issues during local testing
return (claim != null) ? claim.Value : string.Empty;
}
}
Когда я пошел, чтобы изменить функцию GenerateUserIdentityAsync
, чтобы вставить собственные претензии, я начал думать, что мой подход был неправильным, как вы можете только добавить строки, например
userIdentity.AddClaim(new Claim("PreviousUserPasswords", "This must be a string"));
Несмотря на только будучи в состоянии добавить строку здесь, я хотел проверить мои предыдущие пароли читались из базы данных, поэтому я добавил этот код для проверки:
string previousPasswords = "";
await this.PreviousUserPasswords.ForEachAsync(p => previousPasswords += p.PasswordHash);
this.PreviousUserPasswords
всегда NULL
.
Мои вопросы:
1) Почему this.PreviousUserPasswords
всегда NULL
?
2) Является ли мой подход даже правильным - могу ли я добавить список объектов в ApplicationUser
, или я должен делать это по-другому?
Прохладный, я дам ему прочитать. Я в значительной степени реализовал свой собственный способ сделать это, но это не так чисто, как если бы пользователь содержал список предыдущих паролей, но, похоже, это трюк, так или иначе ... – Rick
Хорошо работает со мной. Я могу каждый клиент установить свои собственные требования к политике паролей, включая определение того, что пользователь не может использовать там последние «X» пароли. Если это помогает, отметьте как принятый ответ;) – Kyle