WebSecurity.ChangePassword返回FALSE值

时间:2013-08-22 04:14:32

标签: asp.net webpage webmatrix

我无法弄清楚为什么我的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);

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

2 个答案:

答案 0 :(得分:0)

WebPages会员资格包含了您不需要获取用户电子邮件地址和密码的所有内容(我猜这个电子邮件地址是用户名吗?)ChangePassword方法有3个参数。这是UserName,CurrentPassword,NewPassword。

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

WebPages会员提供商将完成您不需要打开数据库并更新用户密码的所有更新,您正在做的奇怪事情是告诉用户输入新密码但不要求当前密码!有关详细信息,请参阅此处:

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

答案 1 :(得分:0)

确保您尝试更改密码的用户不是LockedOut。您可以通过此

进行检查
select * from aspnet_membership
where 
 IsLockedOut = 1