2016-07-29 6 views
1

Mit ASP.Net, C#, MVC ichASP.Net MVC Ungültige Anmeldeversuch

Ungültige Anmeldeversuch.

wenn ich versuche mich anzumelden. Ich habe die E-Mail-Adresse (n) auskommentiert, da ich nur den Benutzernamen und das Passwort für die Anmeldung verwenden möchte. Beim Debuggen vergewissere ich mich, dass die Werte korrekt sind, und ich habe auch die Werte in der Tabelle überprüft, um sicherzustellen, dass keine versteckten Zeichen vorhanden sind, die den Benutzernamen oder das Passwort verlängern und auschecken.

Hier ist mein Code:

AccountViewModels.cs:

public class LoginViewModel 
    { 
     [Required] 
     [Display(Name = "UserName")] 
     public string UserName { get; set; } 

     //[Required] 
     //[Display(Name = "Email")] 
     //[EmailAddress] 
     //public string Email { get; set; } 

     [Required] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [Display(Name = "Remember me?")] 
     public bool RememberMe { get; set; } 
    } 

Login.cshtml:

<div class="row"> 
    <div class="col-md-8"> 
     <section id="loginForm"> 
      @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
      { 
       @Html.AntiForgeryToken() 
       <h4>Use a local account to log in.</h4> 
       <hr /> 
       @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
       @*<div class="form-group"> 
        @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" }) 
        </div> 
       </div>*@ 
       <div class="form-group"> 
       @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) 
       <div class="col-md-10"> 
        @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) 
        @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" }) 
       </div> 
       </div> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" }) 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <div class="checkbox"> 
          @Html.CheckBoxFor(m => m.RememberMe) 
          @Html.LabelFor(m => m.RememberMe) 
         </div> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" value="Log in" class="btn btn-default" /> 
        </div> 
       </div> 
       <p> 
        @Html.ActionLink("Register as a new user", "Register") 
       </p> 
       @* Enable this once you have account confirmation enabled for password reset functionality 
        <p> 
         @Html.ActionLink("Forgot your password?", "ForgotPassword") 
        </p>*@ 
      } 
     </section> 
    </div> 
    <div class="col-md-4"> 
     <section id="socialLoginForm"> 
      @Html.Partial("_ExternalLoginsListPartial", new ExternalLoginListViewModel { ReturnUrl = ViewBag.ReturnUrl }) 
     </section> 
    </div> 
</div> 

AccountController.cs:

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

      // 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(model.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); 
      } 
     } 

ich ziemlich viel Einsatz die Vorlagen liefern d von VS und änderte alles, was ich im Internet gefunden habe, so kann ich nicht verstehen, was falsch ist. Scheint so, als sollte es funktionieren ......

+0

Haben Sie ssl eingeschaltet und aktiviert? Eine gute Möglichkeit zu sagen ist, ob Ihre Website standardmäßig https: // am Anfang ihrer Adresse hat. – Abob

+0

Was ist der Wert von 'result' in Ihrem' AccountController'? Seltsamerweise, haben Sie völlig sicher gestellt, dass die Zugangsdaten * tatsächlich korrekt sind, anstatt dass die Logik inkorrekt ist? Vielleicht versuchen Sie, ein anderes lokales Konto zu erstellen und sich einzuloggen, um absolut sicher zu sein. –

+0

Mit Hilfe Ihrer Antworten habe ich das Problem herausgefunden. Beim Schreiben des Codes und Testen und Erhalten von Fehlern aufgrund mehrerer Umstände bei der Registrierung hatte ich einige Benutzernamen, die nicht in der SQL-Tabelle enthalten sind. Diese Werte sind offensichtlich irgendwo gespeichert und ich muss sie irgendwie löschen, damit nichts wieder passiert. Um diese Frage richtig zu beantworten, kann jemand die Lösung zur Verfügung stellen, um diese Rogue-Benutzernamen loszuwerden? –

Antwort

0

model.UserName kann mit zwei Feldern verglichen werden: Email oder UserName. Um festzulegen, welches Feld verwendet werden soll, gehen Sie zu App_Start \ IdentityConfig.cs

Ich denke, dass RequireUniqueEmail ist wahr (E-Mail). Wenn Sie dies auf false (Benutzername) setzen, sollte das Problem behoben sein.

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    { 
     var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); 
     manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
     { 
      RequireUniqueEmail = false 
     }; 
+0

Vielen Dank für Ihre Kommentare. Ruard, in der IdentityConfig.cs habe ich die equireUniqueEmail auf false geändert, aber es hat nicht funktioniert. Abob78, ich mache das auf meinem lokalen Rechner und habe es noch nicht mit den aktuellen Änderungen veröffentlicht. Geoff James, in der Zeile: var result = erwarten SignInManager.PasswordSignInAsync (model.UserName, model.Password, model.RememberMe, shouldLockout: false) ;, Ergebnis ist gleich "Fehler". model.UserName und Modell.Das Passwort ist korrekt. –

0

Da Sie nicht angegeben haben, wie Sie Ihr Konto registriert haben, sehen Sie, wie die Vorlage funktioniert.
Wenn Sie sich von der Website registrieren, wird Ihre E-Mail auch Ihr Benutzername sein. Wenn Sie sich also auf der Website anmelden und Ihre E-Mail-Adresse eingeben, wird die E-Mail, die Sie eingeben müssen, identisch mit dem Benutzernamen sein.
Wenn Sie sich jedoch nicht auf der Website registriert haben und angeben, dass sich der Benutzername von der E-Mail unterscheidet, müssen Sie Ihren Nutzernamen eingeben. Sie können Ihren Benutzernamen aus der Datenbank anzeigen.