Ich arbeite an einer Funktion zum Zurücksetzen des Kennworts und versuche zu überprüfen, ob das neue Kennwort mindestens 7 Zeichen lang ist. Es wird laufen und das neue Passwort an den Controller übergeben und es als Passwort für den Benutzer festlegen, aber es verwendet nur das, was eingegeben wurde, anstatt zu überprüfen, ob es die Passwortanforderungen erfüllt. Vielen Dank für alle Anregungen :)Wie kann ich überprüfen, ob ein neues Passwort eine festgelegte Länge mit C# hat?
Hier ist das Modell:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
namespace [CompanyName].Models
{
public class ResetPasswordModel
{
[Required]
[ValidatePasswordLength(7, ErrorMessage = "New passwords must be a minimum of 7 characters, please try a different password.")]
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
}
Und hier ist die Seite, um das Passwort zurücksetzen:
@model [CompanyName].Models.ResetPasswordModel
@{
ViewBag.Title = "ResetPassword";
}
@if (Model == null)
{
<p>
We could not find your user account in the database.
</p>
}
else
{
<script type="text/javascript" src="../../Scripts/jquery.infieldlabel.min.js" ></script>
<script type="text/javascript">
$(document).ready(function() {
$("label").inFieldLabels();
});
</script>
<h2>
Reset Password</h2>
<p>
Please enter your new password below.
</p>
<p>
Note: New passwords are required to be a minimum of 7 characters in length.
</p>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
using (Html.BeginForm())
{
<div style="position: relative;">
<fieldset>
<legend>Reset Password</legend>
<label for="NewPassword" style="position:absolute; top: 24px; left: 16px;">New Password</label>
<div class="editor-field">
@Html.PasswordFor(m => m.NewPassword)
@Html.ValidationMessageFor(m => m.NewPassword)
</div>
<br />
<label for="ConfirmPassword" style="position:absolute; top: 64px; left: 16px;">Confirm New Password</label>
<div class="editor-field">
@Html.PasswordFor(m => m.ConfirmPassword)
@Html.ValidationMessageFor(m => m.ConfirmPassword)
</div>
<p>
<input type="submit" value="reset Password" />
</p>
</fieldset>
</div>
}
}
Aktualisiert Modellcode:
[Required]
[DataType(DataType.Password)]
[Display(Name = "New password")]
[StringLength(50, MinimumLength = 7, ErrorMessage="New passwords must be a minimum of 7 characters, please try a different password.")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
Controller-Code :
public ActionResult ResetPassword(Guid secureID)
{
int id = secureID.FromSecureID();
var model = new ResetPasswordModel();
return View(model);
}
[HttpPost]
public ActionResult ResetPassword(Guid secureID, ResetPasswordModel model)
{
if (ModelState.IsValid)
{
int id = secureID.FromSecureID();
var user = Database.Users.FirstOrDefault(u => u.ID == id);
if (user == null)
{
ModelState.AddModelError("ID", "Sorry! We could not find your user name in the database, please try again.");
return View(model);
}
//else (model.NewPassword == null) {
//return View();
//}
user.PasswordHash = model.NewPassword.ToSha1Hash();
Database.SubmitChanges();
}
return RedirectToAction("ChangePasswordSuccess");
}
Aktualisiert Controller-Code:
[HttpPost]
public ActionResult ResetPassword(Guid secureID, ResetPasswordModel model)
{
if(ModelState.IsValid)
{
int id = secureID.FromSecureID();
var user = Database.Users.FirstOrDefault(u => u.ID == id);
if (user == null)
{
ModelState.AddModelError("ID", "Sorry! We could not find your user name in the database, please try again.");
return View(model);
}
//else (model.NewPassword == null) {
//return View();
//}
user.PasswordHash = model.NewPassword.ToSha1Hash();
Database.SubmitChanges();
return RedirectToAction("ChangePasswordSuccess");
}
return View(model);
}
Aktualisiert Modellcode:
namespace [CompanyName].Models
{
public class ResetPasswordModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "New Password")]
[StringLength(100, ErrorMessage = "The new must be at least 7 characters long.", MinimumLength = 7)]
public string Password { set; get; }
[Required]
[DataType(DataType.Password)]
[Compare("Password")]
[Display(Name = "Confirm New Password")]
public string ConfirmPassword { set; get; }
}
}
Sind Sie die Gültigkeit des Modells in der Controller-Aktion Überprüfung vor der Durchführung die Passwortänderungslogik? .. 'if (ModelState.IsValid) ...'? –
Ich dachte, der 'SqlMembershipProvider' hätte Optionen dafür ... erfüllen sie nicht Ihre Anforderungen? –
@Quintin Ja, ich bin. – Blake