2017-01-05 2 views
0

Ich habe ein kleines logisches Problem bei der Anmeldung auf der Website. Wenn keine registrierte E-Mail-Adresse vorhanden ist, muss die Überprüfung auf der Seite fehlschlagen und eine Nachricht im Feld "E-Mail-Adresse" angezeigt werden, die besagt, dass die E-Mail-Adresse nicht vorhanden ist.Anmeldung mit unregistrierten E-Mail-Adresse löst Ausnahme

Aber ich bin nicht sicher, wie dieser Code unten Login darum kümmern sollte ...

In diesem Code unter ‚Benutzer‘ ist null, wenn keine E-Mail-Adresse gefunden wird, so PasswordSignInAsync eine Ausnahme, weil die Würfe Die user.UserName-Eigenschaft ist null.

Wie würde ich die Validierung für diese umgehen und sollte dies nicht bereits in die Logik für die ASP.Net MVC Vorlage mit Single Sign-On erstellt werden erstellt ich?

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     // Require the user to have a confirmed email before they can log on. 
     var user = await UserManager.FindByEmailAsync(model.Email); 
     if (user != null) 
     { 
      if (!await UserManager.IsEmailConfirmedAsync(user.Id)) 
      { 
       string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account-Resend"); 

       // Uncomment to debug locally 
       // ViewBag.Link = callbackUrl; 
       ViewBag.errorMessage = "You must have a confirmed email to log on. " 
            + "The confirmation token has been resent to your email account."; 
       return View("Error"); 
      } 
     } 

     // This doesn't count login failures towards account lockout 
     // To enable password failures to trigger account lockout, change to shouldLockout: true 
     var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: 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 = model.RememberMe }); 
      case SignInStatus.Failure: 
      default: 
       ModelState.AddModelError("", "Invalid login attempt."); 
       return View(model); 
     } 
    } 

Antwort

1

Wenn Sie möchten, dass die Meldung „Ungültige Anmeldeversuch“ als Validierungsfehler für die E-Mail-Adressfeld angezeigt wird, haben Sie die ModelError für die spezifische Eigenschaft des Ansichtsmodell zu setzen, die die E hält Mail Adresse.

So sollte es so aussehen, während die „Assis“ der Name der Eigenschaft Ansichtsmodell ist:

ModelState.AddModelError("EmailAddress", "Invalid login attempt."); 
Verwandte Themen