カスタム メンバーシップとロール プロバイダー用に独自のクラスを開発しました。
すべてがローカルで機能します。それにもかかわらず、テストのためにソリューションを IIS に展開した後、私のログイン アクションは機能しているように見えます (少なくとも、アクションはユーザー名とパスワードを検証し、ユーザーは認証されているように見えます)。
[Authorize(Roles="Employee, Admin")]
ユーザーが必要な役割を持っていないかのように、ログインページにリダイレクトされ続けます (ただし、彼は持っています)。
ローカルでは、アプリケーションはアクションを実行する前にユーザーの検証と認証されたユーザーのロールのチェックに成功します (したがって、両方のクラスのメソッドは正しいと思います) が、IIS ではロール プロバイダーが正しく動作していないようです。どこが間違っているのか、または問題をよりよく理解するにはどうすればよいかを知っている人はいますか?
私のWeb.Configで:
<system.web>
(...)
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear />
<add name="CustomMembershipProvider" type="MyApplication.Infrastructure.CustomMembershipProvider" connectionStringName="DBEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="CustomRoleProvider">
<providers>
<clear />
<add name="CustomRoleProvider" type="MyApplication.Infrastructure.CustomRoleProvider" connectionStringName="DBEntities" applicationName="/" />
</providers>
</roleManager>
(...)
</system.web>
前もって感謝します。
編集:追加情報。
アクションの注釈の 1 つを単純に [Authorize] に変更したところ、機能しました。したがって、認証は機能し、問題はロール プロバイダーに関連しているに違いないと思います。
私は自分のデータ モデルに Entity Framework を使用しています。文字列は次のとおりです。
ユーザーを登録し、新しく作成したアカウントを使用してログインできました。これは、DB 接続とカスタム メンバーシップ プロバイダー (?) が正常に機能していることを意味します。
"@foreach (Roles.GetRolesForUser(User.Identity.Name) 内の文字列 str){@str} はロールをローカルに出力し、デプロイ時には何も出力しません。