web-dev-qa-db-ja.com

現在のパスワードがわからない場合、asp.netメンバーシッププロバイダーを使用してハッシュされたパスワードをどのように変更しますか?

問題、方法はありません:

bool ChangePassword(string newPassword);

現在のパスワード(おそらくハッシュ化され、忘れられている)を知っている必要があります。

57
mcqwerty

これは私が時間を浪費しすぎた簡単なものです。うまくいけば、この投稿により、他の誰かが私のように激しく額を平手で叩く手間を省くことができます。

解決策、パスワードをランダムにリセットし、それをchangeメソッドに渡します。

MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "myAwesomePassword");
127
mcqwerty

RequireQuestionAndAnswer = "true"の場合、パスワードを変更することはできません。

私はこのための回避策を得ました

Web.configに2つのメンバーシッププロバイダーを作成

aspNetSqlMembershipProviderがデフォルトのプロバイダーとして使用されているため、requiresQuestionAndAnswer = falseがあるため、パスワードのリセットにAspNetSqlMembershipProviderResetプロバイダーを使用しています。

ユーザーのパスワードをリセットするために次のコードを書きました。

public bool ResetUserPassword(String psUserName、String psNewPassword){try {//必要な質問の回答をfalseに設定して、secoundメンバーシッププロバイダーを使用してメンバーシップユーザーの詳細を取得します。

        MembershipUser currentUser = Membership.Providers["AspNetSqlMembershipProviderReset"].GetUser(psUserName,false);

        //Reset the user password.
        String vsResetPassword = currentUser.ResetPassword();            

        //Change the User password with the required password            
        currentUser.ChangePassword(vsResetPassword, psNewPassword);
        //Changed the comments to to force the user to change the password on next login attempt
        currentUser.Comment = "CHANGEPASS";
        //Check if the user is locked out and if yes unlock the user
        if (currentUser.IsLockedOut == true)
        {
            currentUser.UnlockUser();
        }
        Membership.Providers["AspNetSqlMembershipProviderReset"].UpdateUser(currentUser);            return true;
    }
    catch (Exception ex)
    {
        throw ex;
        return false;
    }
}
2
Mangesh Shelar