如何检查用户输入的旧密码在MVC实体代码优先方法中是否正确?

时间:2017-05-11 13:07:56

标签: ajax asp.net-mvc ef-code-first change-password

我有一个应用程序用户的编辑视图,用户可以从中更改其详细信息。该视图包含用户名,电子邮件,旧密码和新密码。因为,用户输入旧密码我想用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请求不起作用。

1 个答案:

答案 0 :(得分:1)

使用此:

        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);
            }
        }