2017-01-19 1 views
0

Ich versuche, eine Liste von Objekten das Standard ApplicationUser-Objekt in MVC hinzuzufügen.Anpassen von ApplicationUser asp.net-identity

Ich habe Dutzende von Fragen zu diesem Thema, aber sie alle scheinen ein einzelnes Objekt, anstatt eine Liste hinzuzufügen.

Ich versuche, alle historischen Kennwörter, die ein Benutzer verwendet hat, aufzuzeichnen, also habe ich eine Tabelle mit der Bezeichnung AspNetUserPreviousPassword hinzugefügt.

In meinem Code habe ich diese Zeile in der ApplicationUser Klasse hinzugefügt:

public virtual DbSet<AspNetUserPreviousPassword> PreviousUserPasswords { get; set; } 

und im AspNetUserPreviousPassword Objekt ich hinzugefügt haben folgendes:

public string ApplicationUserId { get; set; } 
public ApplicationUser ApplicationUser { get; set; } 

ich angelegt habe die folgende Erweiterungsklasse:

öffentliche statische Klasse IdentityExtensions, die in der User.Identity Intellisense erschienen ist - so weit so gut.

{ 
    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; 
    } 
} 

Wenn ich die GenerateUserIdentityAsync Funktion bearbeiten ging, die benutzerdefinierten Ansprüche einzufügen, begann ich mein Ansatz zu denken war falsch, da Sie nur Strings hinzufügen können, z

userIdentity.AddClaim(new Claim("PreviousUserPasswords", "This must be a string")); 

Trotz nur in der Lage ist, eine Zeichenfolge hier hinzufügen, ich meine früheren Passwörter testen wollte wurden aus der Datenbank gelesen werden, so dass ich diesen Code zu testen hinzugefügt:

string previousPasswords = ""; 
await this.PreviousUserPasswords.ForEachAsync(p => previousPasswords += p.PasswordHash); 

this.PreviousUserPasswords ist immer NULL.

Meine Fragen:

1) Warum ist this.PreviousUserPasswords immer NULL?

2) Ist meine Vorgehensweise sogar korrekt - kann ich eine Liste von Objekten zu ApplicationUser hinzufügen oder sollte ich das auf eine andere Weise machen?

Antwort

0

Hier ist der Artikel, den ich verwendet habe, um die Verwendung von früheren "X" Passwörtern in meiner Implementierung von Asp.Net Identity zu verhindern. Ich habe es an meine Bedürfnisse angepasst, aber das hat mir alles gegeben, was ich brauchte, um auf dem richtigen Weg zu sein. Lesen Sie es durch.

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

+0

Cool Ich werde es lesen. Ich habe meine eigene Art, es zu tun, ziemlich implementiert, aber es ist nicht so sauber, als wenn der Benutzer die Liste der vorherigen Passwörter enthält, aber es scheint den Trick zu machen, so weit ... – Rick

+0

Funktioniert sehr gut mein ich. Ich kann jeden Client ihre eigenen Passwortrichtlinien Anforderungen einschließlich der Definition eines Benutzers kann nicht dort letzten "X" Passwörter setzen. Wenn dies hilft, bitte als akzeptierte Antwort markieren;) – Kyle