Wenn Sie Ihren eigenen IUserStore implementieren, sind die "optionalen" Schnittstellen für die Klasse tatsächlich optional?
Ich arbeite mit Microsoft Asp.Net Identity Framework Version 2 und implementiere meinen eigenen IUserStore. Meine neue KlasseMyUserStore
implementiert dasIUserStore<MyUserClass,int>
interface und dasIUserPasswordStore<MyUserClass,int>
, das ist, was erforderlich ist, um es mit dem @ zu verwendUserManager<MyUserClass,int>
Klasse. Zumindest habe ich das aus Tutorials wie @ gelernDie:
"Die einzige erforderliche Schnittstelle im Identitätssystem ist IUserStore" - Scott Allen
Aber dies scheint nicht der Fall zu sein, wenn ich den Code ausführe.
Ich initialisiere meinen Manager:
var uMan= new UserManager<MyUserClass, int>(new MyUserStore());
var sMan = new SignInManager<MyUserClass, int>(uMan,authCtxFromOwin);
Und wenn sMan.PasswordSignIn (...) auf dem SignInManager ausgeführt wird, führt der SignInManager immer Funktionen im UserManager aus, die von den optionalen Schnittstellen abhängen. Hier ist die Quelle für die PasswordSignInAsync-Methode aus der SignInManager-Klasse:
public virtual async Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
...
if (await UserManager.IsLockedOutAsync(user.Id).WithCurrentCulture())
{
return SignInStatus.LockedOut;
}
if (await UserManager.CheckPasswordAsync(user, password).WithCurrentCulture())
{
return await SignInOrTwoFactor(user, isPersistent).WithCurrentCulture();
}
...
return SignInStatus.Failure;
}
Es ruft immer UserManager.IsLockedOutAsync () auf, bevor versucht wird, das Kennwort zu überprüfen. Wenn der Informationsspeicher die IUserLockoutStore-Schnittstelle also nicht implementiert, wird jedes Mal eine Ausnahme ausgelöst, egal was passiert.
Bedeutet dies, dass Sie zur Verwendung der Standardfunktionalität der Klassen UserManager und SignInManager jede I * Store-Schnittstelle implementieren müssen?
s sieht so aus, als ob die Problemumgehung von SignInManager geerbt und die PasswordSignInAsync-Methode überschrieben werden soll. Ist das die übliche Praxis?
Vielen Dank