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 つの引数を取ります。UserName、CurrentPassword、NewPassword です。

false になる理由は、ユーザーの現在の ID に基づいてデータベースから古いパスワードを取得しているためですが、古いパスワードは暗号化されており、送信したパスワードを暗号化していないため、古いパスワードはユーザーの現在のパスワードと一致しません (実際、現在のパスワードを入力するフィールドさえありません)。

WebPages メンバーシップ プロバイダーは、データベースを開いてユーザーのパスワードを更新する必要のないすべての更新を行います。奇妙なことは、ユーザーに新しいパスワードを入力するように指示しますが、現在のパスワードは要求しません! 詳細については、これを参照してください。

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

于 2013-10-29T21:12:16.263 に答える