如何检查用户输入的旧密码在 MVC 实体代码优先方法中是否正确?
How to check the old password user entered is correct in MVC Entity Code-First Approach?
我有一个应用程序用户的编辑视图,用户可以从中更改他们的详细信息。该视图包含用户名、电子邮件、旧密码和新密码。因为,用户输入旧密码我想用ajax检查数据库用户是否输入了正确的旧密码?如果旧密码正确,那么我将启用新密码,否则我需要向用户显示密码不正确的消息。我怎样才能做到这一点?有什么远程方法可以做到吗?
查看模型
[DataType(DataType.Password)]
[Display(Name = "Old password")]
public string OldPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
public string NewPasswordCompare { get; set; }
Ajax代码
<script>
$(document).ready(function () {
$("#Verify").click(function () {
var oldPassword = $('#Password').val();
$.ajax({
type: "GET",
url: "@Url.Action("GetPassword")",
data: {'id':@Model.Id, 'password': oldPassword},
datatype: "JSON",
success: function (data) {
if (data) {
console.log("Working");
}
}
});
});
});
</script>
控制器
public JsonResult GetPassword(string id, string password)
{
using (var db = new ApplicationDbContext())
{
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var user = UserManager.FindById(id);
if (UserManager.CheckPassword(user, password))
{
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
Ajax 请求无效。
您必须先对收到的密码进行哈希处理,然后再进行比较。
var UserManager = new UserManager<User>(new UserStore<User>(new ApplicationDbContext()));
String hashedOldPassword = UserManager.PasswordHasher.HashPassword(password);
ApplicationDbContext db = new ApplicationDbContext();
var result = db.Users.Where(u => u.Id == id && u.PasswordHash == hashedOldPassword).First();
会成功的。
使用这个:
using (var db = new ApplicationDbContext())
{
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var user = UserManager.FindById(id);
if (UserManager.CheckPassword(user, password))
{
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
我有一个应用程序用户的编辑视图,用户可以从中更改他们的详细信息。该视图包含用户名、电子邮件、旧密码和新密码。因为,用户输入旧密码我想用ajax检查数据库用户是否输入了正确的旧密码?如果旧密码正确,那么我将启用新密码,否则我需要向用户显示密码不正确的消息。我怎样才能做到这一点?有什么远程方法可以做到吗?
查看模型
[DataType(DataType.Password)]
[Display(Name = "Old password")]
public string OldPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
public string NewPasswordCompare { get; set; }
Ajax代码
<script>
$(document).ready(function () {
$("#Verify").click(function () {
var oldPassword = $('#Password').val();
$.ajax({
type: "GET",
url: "@Url.Action("GetPassword")",
data: {'id':@Model.Id, 'password': oldPassword},
datatype: "JSON",
success: function (data) {
if (data) {
console.log("Working");
}
}
});
});
});
</script>
控制器
public JsonResult GetPassword(string id, string password)
{
using (var db = new ApplicationDbContext())
{
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var user = UserManager.FindById(id);
if (UserManager.CheckPassword(user, password))
{
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
Ajax 请求无效。
您必须先对收到的密码进行哈希处理,然后再进行比较。
var UserManager = new UserManager<User>(new UserStore<User>(new ApplicationDbContext()));
String hashedOldPassword = UserManager.PasswordHasher.HashPassword(password);
ApplicationDbContext db = new ApplicationDbContext();
var result = db.Users.Where(u => u.Id == id && u.PasswordHash == hashedOldPassword).First();
会成功的。
使用这个:
using (var db = new ApplicationDbContext())
{
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var user = UserManager.FindById(id);
if (UserManager.CheckPassword(user, password))
{
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}