Ich bin eine alte Website Refactoring OWIN und Ansprüche mit Formen und externen loigins mit ASP Identität 2.ASP Identität Neuer Benutzer mit externallogin
Ich habe eine Frage rund um die richtige Art und Weise zu verwenden, um einen neuen Benutzer mit externem zu erstellen Anmeldung.
Ich benutze den MVC Scaffolding-Code, habe aber einen benutzerdefinierten UserStore, UserManager und signinmanager und alles funktioniert meistens.
Die Kontosteuerung hat in der ExternalLoginCallback-Methode einen Fall mit einem Kommentar zum Umleiten an ExternalLoginConformation, wenn ein Benutzer nicht gefunden wird, aber ich bin nicht sicher, wo die Login-Logik kurzgeschlossen werden soll.
var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
case SignInStatus.Failure:
default:
// If the user does not have an account, then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
}
Die SignInManager.ExternalSignInAsync Verfahren fließt durch die Users und Usermanager und signinmanager in der folgenden mannor. Wo und wie ist der beste Weg, um die Logik kurz zu machen, um das Ergebnis als Fehler zu erhalten?
Account: ExternalLogin (Provider, ReturnUrl)
My Owin Middleware
Account: ExternalLoginCallBack AuthenticationManager gibt Logininfo mit allen Details
Usermanager: Aufgabe FindAsync (UserLoginInfo) Users Anrufe: Aufgabe FindAsync (UserLoginInfo) UserLoginInfo hat Provider und Key und das ist, wo ich finde, dass es keinen Benutzer im System gibt. Egal welche Aufgabe ich zurückgebe, es stoppt den Fluss nicht.
... Users: Lockout und andere misc Sachen - braucht ein User-Objekt selbst wenn diese leer ...
SignInManager: Aufgabe SignInAsyn (Benutzer, Persistent, Remeber) - User-Objekt ist leer
SignInManager: Aufgabe CreateUserIdentityAsync (Benutzer) - User-Objekt ist leer
Benutzer: Aufgabe GenerateUserIdentityAsync (Usermanager Manager)
Usermanager: CreateIdentity Async-Benutzer (Benutzer, Auth-Typ) ist leer und auth type = "externer Cookie". Dies löst eine NULL-Ausnahme aus.
Lösung gefunden. Ich kann eine Null-Aufgabe von der UserManager FindAsync-Methode zurückgeben und es wird zu einem Fehlerergebnis führen.
return Task.FromResult<MyUser>(null);
Sie sollten Ihre eigene Frage beantworten. – Gilles