2016-11-23 9 views
0

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); 
+0

Sie sollten Ihre eigene Frage beantworten. – Gilles

Antwort

0

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); 
Verwandte Themen