Die Umsetzung UserManager für die Verwendung einer benutzerdefinierten Klasse und Gespeicherten Prozeduren
Alle Authentifizierungs-und Autorisierungs-Prozess meiner app erfolgt mithilfe von gespeicherten Prozeduren. Ich habe geschrieben, eine Klasse mit allen Funktionen, die ich brauche, z.B. GetUsers
, Login
, AddRole
, AddMember
usw.
Auch die admin-Seite für die Verwaltung von Benutzern und Rollen und Berechtigungen erfolgt durch die Verwendung dieser Klasse.
Nur muss ich hinzufügen authentication
(ich meine, dass authorize
Attribut), cookies für den Login und Logout und speichern einige server-Seite Daten für jede Anmeldung. Ich glaube, ich brauche zu implementieren Identity
?
In diesem Fall, können Sie bitte führe mich mit der Umsetzung? Es scheint, die sehr grundlegende Sache, die Sie tun müssen, ist die Umsetzung einer create
Methode übergibt eine Instanz von IUserStore
an den Konstruktor übergeben. Aber ich nicht brauchen, um alle Tabellen für den Benutzer oder Rollen, wie kann ich diese Methode implementieren?
Dies ist die aktuelle Klasse, und bitte lassen Sie mich wissen, wenn Sie brauchen, um zu sehen, meine benutzerdefinierte Authentifizierung-Klasse, die gespeicherte Prozeduren verwendet.
public class AppUserManager : UserManager<AppUser>
{
public AppUserManager(IUserStore<AppUser> store) : base(store) { }
public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{
//AppUserManager manager = new AppUserManager();
//return manager;
return null;
}
}
InformationsquelleAutor Akbari | 2015-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als alisabzevari empfohlen, Sie implementieren müssen, um Ihre IUserStore.
Sie tun auch nicht davon abhängen, die Lagerung und die Struktur der Tabelle definiert.
Sie können anpassen, jedes einzelne bit Ihrer storage-Schicht.
Habe ich einige Experimente und versucht, die Umsetzung eigener
UserManager
undRoleManager
mit einem anderen Speicher, wie Biggy:Finden Sie den code hier auf GitHub.
Erste, was zu tun ist, um Ihre
UserManager
wo können Sie konfigurieren Sie die Anforderungen für Ihre Passwort-Validierung:und dann definieren Sie Ihre
IUserStore
Umsetzung. Die main-Methode implementiert werden muss, istCreateAsync
:erhalten Sie eine
IUser
die Sie weiterhin in Ihre benutzerdefinierte Speicher und gibt ihn zurück.Wenn Sie einen Blick auf den code habe ich umgesetzt können Sie sehen, ich habe ein paar Schnittstellen
IUserRoleStore
,IUserPasswordStore
,IUserClaimStore
etc etc, wie ich brauchte, um Rollen und Ansprüche.Habe ich auch umgesetzt, meine eigene
SignInManager
.Sobald Sie definiert haben, alle Ihre Implementierung können Sie bootstrap-alles auf Start:
Können Sie überprüfen, meine AccountController, wo ich versuchen, um den Benutzer zu überprüfen:
Einmal
PasswordSignInAsync
genannt wird, werden Sie feststellen, ein paar von den Methoden IhresUserManager
aufgerufen werden. Der erste FindByNameAsync:Sie implementieren müssen, um Ihre gespeicherte Prozedur, denke ich, wo Sie Holen Ihre Nutzer aus der DB.
Dann eine andere Methode
FindByIdAsync
werden genannt:Wieder müssen Sie verwenden Sie Ihre gespeicherte Prozedur zu finden, die Ihre Benutzer durch seine/Ihre id.
Wenn Sie den download für mein Projekt von github und spielen, um mit ihm werden Sie feststellen, dass die meisten diese Methoden mehrmals aufgerufen werden. Keine Angst bekommen. Das ist so, wie es ist.
Ich würde vorschlagen, Sie legen Sie Haltepunkte in jede einzelne Methode der UserStore und sehen, wie alles zusammen passt.
The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
Für die Anmeldung und in dieUserManager.FindAsync
ich bekomme den oben genannten Fehler. Irgendeine Idee? Ich denke, es ist relativ zuGetPasswordHashAsync
.Was kann ich tun?Es ist schwer zu sagen. Haben Sie versucht, mein Beispiel-Projekt? FindAsync verwendet UserLoginInfo. Es geht durch das Rohr, wenn Sie über einen externen Anbieter (google, facebook). Wenn Sie nicht, dass Sie sollten gehen Sie durch es. Falls Sie mit einem externen Anbieter können Sie implementieren, die UserLoginInfo manager. Sie können überprüfen, Raven Umsetzung.
Danke Lefty, ich habe deinen code. Ich bin nicht mit externen Anbietern. Und anstelle der Verwendung von Benutzer-manager Finden, ich habe meine eigene benutzerdefinierte Funktion, um Zeit zu sparen! 🙂
Froh, dass ich geholfen habe. Wenn Sie glauben, meine Antwort ist gut genug, könntest du, bitte, akzeptieren Sie es? Cheers.
Heruntergeladen habe ich das Projekt aus dem link, Sie haben in Ihrer Antwort aber ich bin hier hängengeblieben :app.CreatePerOwinContext<Benutzerdefiniert.Identität.UserManager>(() => neue Benutzerdefinierte.Identität.UserManager(neue Benutzerdefinierte.Identität.UserStore(folderStorage))); app.CreatePerOwinContext<Benutzerdefiniert.Identität.RoleManager>(() => neue Benutzerdefinierte.Identität.RoleManager(neue Benutzerdefinierte.Identität.RoleStore(folderStorage)));
InformationsquelleAutor LeftyX
Implementieren Sie IUserStore-Schnittstelle. Sehen dieser Artikel zu lernen, wie zu implementieren Benutzerdefinierte Storage-Anbieter für ASP.NET Identität.
InformationsquelleAutor alisabzevari
Sie können auch überschreiben Sie die Methoden in Ihrer
UserManager
Klasse (z.B.ApplicationUserManager
) zum verwalten der Autorisierung. Hier ist ein Beispiel, das verwendet benutzerdefinierteUserManager.FindAsync
Logik. DieUserManager
- Klasse wird verwendet, indem dieApplicationOAuthProvider
Klasse während der Authentifizierung.Beachten Sie, dass diese Implementierung nicht die Vorteile der
IUserStore
- Schnittstelle.InformationsquelleAutor Hans Vonn