0

認証メカニズムに SimpleMEmbershipProvider を使用する MVC4 アプリケーションがあります。

アプリケーションに戻って永続的な Cookie を使用して認証する場合を除いて、すべて正常に動作します。

正常に認証されていますが、割り当てられているロールにアクセスできません。事実上、ロールにまったくアクセスできません。

string.Join(",", Roles.GetRolesForUser(User.Identity.Name)) 

空の文字列を返します

何が原因でしょうか?

4

1 に答える 1

4

これは、SimpleMembershipProvider が初期化されていない場合に発生する可能性があります。MVC フォーム認証テンプレートの例では、サイトへの匿名アクセスを許可し、ログイン ページに移動するまでメンバーシップ プロバイダーを初期化しないことを前提としています。ただし、より一般的なセキュリティ手法は、サイトへのアクセスにログインを要求し、ロールによって決定されるように _layout ページでメニューの選択肢を定義することです。ただし、永続的な Cookie を使用すると、ログイン ページに再度アクセスしないため、認証されたユーザーのロールがメンバーシップ データベースから読み込まれません。

やりたいことは、ユーザーがサイトに入ったときにプロバイダーを初期化して、値が読み込まれるようにすることです。これを行うには、App_Start フォルダーの FilterConfig クラスの RegisterGlobalFilters メソッドに次のフィルターを追加します。

filters.Add(new YourAppNameSpace.Filters.InitializeSimpleMembershipAttribute());

これにより、Cookie で認証されたユーザーがサイトにアクセスしたときに、データベースからユーザー データが読み込まれます。

もう 1 つの代替手法は、[InitializeSimpleMembership] デコレーターを、Cookie で認証されたユーザーが直接入力するコントローラー メソッドに追加することです。ただし、多くのコントローラーに配置する必要がある場合、これは面倒です。したがって、ほとんどの場合、グローバル フィルターに入れる方が適切です。

于 2013-04-25T15:36:39.617 に答える