0

我不知道为什么我的 WebSecurity.ChangePassword 不起作用。这是我正在处理的一段代码。

     if (WebSecurity.ChangePassword(USER, oldpass, password)) {
                    Response.Redirect("~/SuperAdmin");
                    return;
                }else {
                    ModelState.AddFormError(USER); 
// I put the each WebSecurity.ChangePassword parameter to this parameter to check whether 
//each parameter valid or not (print it out)                   

 }

对于 WebSecurity.ChangePassword 的每个参数,我从数据库中检索它,如下所示

 if(IsPost){
    Validation.RequireField("email", "Masukkan email");
    Validation.RequireField("password", "Masukkan Password");
    Validation.RequireField("userid", "user ID tidak ada!");

    email = Request.Form["email"];
    password = Request.Form["password"];
    userId = Request.Form["userId"];

    if(Validation.IsValid()){
        var db = Database.Open("StarterSite");
        var updateCommand2 = "UPDATE UserProfile  SET Email=@0 WHERE UserId=@1";
        db.Execute(updateCommand2, email,userId);
        var USER = db.QueryValue("SELECT a.Email  FROM UserProfile a, webpages_Membership b   WHERE a.UserId=b.UserId AND a.UserId= @0", userId);
        var oldpass = db.QueryValue("SELECT Password  FROM webpages_Membership  WHERE UserId = @0", userId);

谁能告诉我这里似乎有什么问题?提前致谢

4

2 回答 2

0

WebPages Membership 已经构建了您不需要获取用户电子邮件地址和密码的所有内容(我猜电子邮件地址是用户名对吗?) ChangePassword 方法需要 3 个参数。这是用户名,当前密码,新密码。

错误的原因是因为您根据用户当前 ID 从数据库中获取旧密码,但旧密码与用户当前密码不匹配,因为旧密码已加密并且您没有加密他们提交的密码(在事实上,您甚至没有让他们输入当前密码的字段)。

WebPages Membership 提供者将完成所有您不需要的更新,打开数据库并更新用户密码,您正在做的奇怪的事情是告诉用户输入新密码但不要求当前密码!在这里查看更多信息:

http://www.thecodingguys.net/reference/asp/websecurity-changepassword

于 2013-10-29T21:12:16.263 回答
0

确保您尝试更改密码的用户不是 LockedOut。你可以通过这个检查

select * from aspnet_membership
where 
 IsLockedOut = 1  
于 2015-01-16T10:40:17.460 回答