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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage