0

MembershipProviderでかなり厄介な問題だと思うことがわかりました...他の誰かがすでにこれに遭遇し、エレガントに解決したことを願っています。

管理目的(監査、強制リセットなど)で保存できるように、パスワードを変更しながらパスワード強度を計算するメソッドを作成しました。プレーンテキストのパスワードは保存したくないので、この値は次のようにする必要があります。パスワード変更時に計算されます。

さらに悪いことに、私は既存のコードベースにこの改善を加えており、特定のプロジェクトに触れないようにし、可能な場合は小さな構成変更を優先しています。メンバーシッププロバイダーを呼び出すコードは、次の順序で呼び出します。

GetUser ChangePassword UpdateUser

残念ながら、ChangePasswordの後にUpdateUserを呼び出すと、更新が失われます。私には、これはプロバイダー構造の根本的な欠陥のように思えます。パスワードを検証するにはChangePasswordが必要ですが、UpdateUserにはどの変更が行われたかを知る方法がありません。

他の誰かがこの問題に遭遇しましたか?

注:パスワードの変更ワークフローを分離して、UpdateUserを完全に回避できることを理解しています。既存のコードベースの将来のバージョンで更新される可能性のある既存のコードブロックを完全に置き換える必要があるため、これを行わないようにしています。

4

1 に答える 1

0

これを解決するには、新しい MembershipUser を派生させ、そこで ChangePassword をオーバーライドします。これにより、ベース コールで ChangePassword が呼び出されます。

基本メソッドを呼び出し、結果が true の場合は、パスワードの「メタデータ」をそこのオブジェクトに組み込みました。あとで更新メソッドが呼び出されたとき、正しいデータがオブジェクトに存在していました。

誰かがより良い解決策にたどり着いた場合に備えて、この質問はしばらく開いたままにします。

于 2012-11-08T10:30:02.213 に答える