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?
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
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