0

「パスワードの変更が必要」という特別な役割を持つ ASP.NET 役割を使用しています。ユーザーが 90 日以上パスワードを変更していない場合、ユーザーは自動的にこのロールに追加されます。これは、ユーザーのログイン プロセス中に発生します。次に、承認規則は、「パスワードの変更」ページを除くすべてのアプリケーションへのその役割のアクセスを拒否します。

通常、これは問題なく動作しますが、ロール キャッシュ Cookie を使用してロールをキャッシュする場合に問題が発生します。ログイン プロセス中に、パスワードの最終変更日がチェックされ、90 日以上経過している場合、ユーザーは「Must Change Password」ロールに追加されます。同じページ リクエストで、続いて Roles.IsUserInRole("Must Change Password") を呼び出して、ユーザーを [パスワードの変更] ページにリダイレクトするかどうかを決定します。ここで問題が発生します。ロール キャッシュ Cookie が有効になっていると、Roles.IsUserInRole("Must Change Password") は、このユーザーのロール マッピングを変更したことを認識せず、false を返すようです。ただし、次のページ リクエストでは、Roles.IsUserInRole("Must Change Password") は true を返します。

この動作は、cacheRolesInCookie="false" を設定することで修正されますが、それには高い代償が伴います。この問題を解決する別の方法はありますか?

4

3 に答える 3

1

別の、IMHO よりエレガントな解決策は、新しいロールをユーザーに追加した後にメソッドにキャストHttpContext.UserRolePrincipalて呼び出すことです ( RolePrincipal.SetDirty の詳細を参照)。SetDirty

次に IsInRole または GetRolesForUser メソッドを呼び出すと、デフォルトの RoleProvider へのリクエストがトリガーされます。

于 2010-11-22T13:23:41.160 に答える
0

実際、私は問題を発見しました。これは、Cookie にロールをキャッシュすることの問題ではなく、Roles.IsUserInRole() の問題です。オーバーロード Roles.IsUserInRole(username, role) を使用すると、Cookie にキャッシュされたロールの有無にかかわらず、正常に動作します。

于 2009-07-14T21:56:28.800 に答える