Ich bin nur ein Anfänger von ASP.NET MVC. Ich habe gerade mit dem Erstellen meiner Login-Seite begonnen, es funktioniert gut, aber ich habe ein Problem, wenn der Benutzer falsche Anmeldeinformationen eingibt. Dies ist, was ich getan habe:ASP.NET MVC: ModelState Fehlermeldung wird nicht angezeigt
Userprofile
public partial class UserProfile
{
public int UserId { get; set; }
[Display(Name = "User name")]
[Required(ErrorMessage = "Username is required.")]
public string UserName { get; set; }
[Display(Name = "Password")]
[DataType(DataType.Password)]
[Required(ErrorMessage = "Password is required.")]
public string Password { get; set; }
public bool IsActive { get; set; }
}
Homecontroller:
public class HomeController : Controller
{
public ActionResult Login()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(UserProfile objUser)
{
if (ModelState.IsValid)
{
using (DB_Entities db = new DB_Entities())
{
var obj = db.UserProfiles.Where(a => a.UserName.Equals(objUser.UserName) && a.Password.Equals(objUser.Password)).FirstOrDefault();
if (obj != null)
{
Session["UserID"] = obj.UserId.ToString();
Session["UserName"] = obj.UserName.ToString();
return RedirectToAction("UserDashBoard");
}
}
}
else
{
ModelState.AddModelError("", "Invalid Credentials");
}
return View(objUser);
}
public ActionResult UserDashBoard()
{
if (Session["UserID"] != null)
{
return View();
}
else
{
return RedirectToAction("Login");
}
}
}
Und die Ansicht
@model MyWebApplication.Models.UserProfile
@{
ViewBag.Title = "Login";
}
@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Login" class="btn btn-default" />
</div>
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Ich bin mir nicht sicher, warum die Meldung "Ungültige Anmeldeinformationen" nicht angezeigt wird, wenn der Benutzer einen Benutzernamen eingibt, der nicht in der Datenbank gespeichert ist.
Es wird nicht angezeigt, da der Fluss Ihres Programms den Modellstatusfehler nicht festlegt, wenn die Anmeldeinformationen ungültig sind. Sie legen den Fehler nur fest, wenn 'ModelState.IsValid' falsch ist. Wenn dies der Fall ist, authentifizieren Sie den Benutzer, geben aber keinen Fehler zurück, wenn dieser ungültig ist. –
Unter keinen Umständen speichern Sie jemals ein Passwort in einer Datenbank als einfachen Text - Ihre Hash (und Salz) sie. Und ich schlage Ihre Arbeit dennoch vor [Sicherheit, Authentifizierung und Autorisierung] (https://www.asp.net/mvc/overview/security) –