2017-01-19 4 views
0

Я пытаюсь добавить список объектов в стандартный объект 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, или я должен делать это по-другому?

ответ

0

Вот статья, которую я использовал, чтобы предотвратить использование предыдущих паролей «X» в моей реализации Asp.Net Identity. Я изменил его в соответствии с моими потребностями, но у меня получилось все, что мне нужно, чтобы попасть на правильный путь. Дайте ему прочитать.

http://www.c-sharpcorner.com/UploadFile/4b0136/how-to-customize-password-policy-in-Asp-Net-identity/

+0

Прохладный, я дам ему прочитать. Я в значительной степени реализовал свой собственный способ сделать это, но это не так чисто, как если бы пользователь содержал список предыдущих паролей, но, похоже, это трюк, так или иначе ... – Rick

+0

Хорошо работает со мной. Я могу каждый клиент установить свои собственные требования к политике паролей, включая определение того, что пользователь не может использовать там последние «X» пароли. Если это помогает, отметьте как принятый ответ;) – Kyle

Смежные вопросы