我如何检查以确保新密码的长度与C#一致
本文关键字:密码 一致 确保 何检查 检查 新密码 | 更新日期: 2023-09-27 18:29:24
我正在研究密码重置功能,并试图检查以确保新密码至少为7个字符。它将运行并将新密码传递给控制器,并将其设置为用户的密码,但它只是使用输入的内容,而不是检查以确保其符合密码要求。感谢您的任何建议:)
这是型号:
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; }
}
}
这是重置密码的页面:
@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>
}
}
更新型号代码:
[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; }
控制器代码:
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");
}
更新的控制器代码:
[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);
}
更新型号代码:
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; }
}
}
我不确定ValidatePasswordLength
是什么,但System.ComponentModel.DataAnnotations.StringLengthAttribute
应该足够了,并且由MVC绑定器和验证器处理(也在jQuery.validate端)。
[StringLength(50, MinimumLength = 7)]
public string NewPassword { get; set; }
然后在你的控制器中,你可以有这样的动作:
public ActionResult ResetPassword(ResetPasswordViewModel model)
{
if (ModelState.IsValid)
{
//do something with the valid model and return
}
return View(model);
}
视图模型中的此属性将处理它。
[Required]
[DataType(DataType.Password)]
[Display(Name = "New Password")]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 7)]
public string NewPassword{ set; get; }
[Required]
[DataType(DataType.Password)]
[Compare("Password")]
[Display(Name = "Confirm New Password")]
public string ConfirmPassword { set; get; }
在控制器操作中,您可以检查ModelState.IsValid属性以查看Validation是否失败
[HttpPost]
public ActionResult ResetPassword(Guid secureID, ResetPasswordModel model)
{
if(ModelState.IsValid)
{
// Validation correct, Lets save the new password and redirect to another action
}
return View(model);
}
您可以使用PasswordValidator。
// Check if the Password has changed
if (!string.IsNullOrEmpty(model.Password))
{
// Get the first PasswordValidators... it must do
var pwd = userManager.PasswordValidators[0];
// Check whether the Password is valid
result = await pwd.ValidateAsync(userManager, user, model.Password);
if (!result.Succeeded)
{
foreach (var error in result.Errors)
ModelState.AddModelError("", error.Description);
return View(model);
}
// Hash the new Password
user.PasswordHash = userManager.PasswordHasher.HashPassword(user, model.Password);
bDirty = true;
}
您可以从视图中删除这条线。
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 7)]