管理者用のログイン ページと、一般ユーザー用のログイン ページがあります。一般ユーザー セクション用のカスタム メンバーシップ プロバイダーを作成したので、web.config ファイルでフォーム認証を行いたいと思います。どうやってするか ?
2 に答える
webconfig ファイル内でログイン用に 2 つのログイン URL を設定することはできません。独自のカスタム メンバーシップ プロバイダーを作成する場合は、[Authorize] 属性を機能させるために、それを defaultprovider として設定する必要があります。しかし、私の場合、2 つのプロバイダーがありました。どちらもカスタム プロバイダーであり、既定のプロバイダーを変更することはできませんでした。1 つのプロバイダーは管理者ログイン (デフォルト プロバイダー) に使用され、別のプロバイダーはユーザー ログイン (カスタム プロバイダー) に使用されます。Web 構成フォーム認証で有効化されました
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
そのため、[Authorize] 属性を使用していたときに、管理者のログイン ページに移動していましたが、これは予期されたものです。しかし、ユーザーのログイン ページに移動するための属性が必要でした。そこで、ユーザーをユーザー ログイン セクションに移動させる [AuthorizeUser] 属性を作成しました。
public class AuthorizeUserAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
var username = filterContext.HttpContext.User.Identity.Name;
if (username != "")
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Login", action = "Index" }));
}
}
}
この属性により、ユーザーは ~/login のユーザー ログイン ページに誘導されます
カスタム メンバーシップ プロバイダーを使用する場合、カスタム ロール プロバイダーも構成し、次の行を web.config ファイルに追加します。シナリオをサポートしているかどうかを確認できます。
ステップ1:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership defaultProvider="YourCustomMembershipProviderName">
<providers>
<clear/>
<add name="YourCustomMembershipProviderName" type="Logger.SampleApp.Security.Infrustructure.CustomeMembershipProvider" connectionStringName="YourConnectionStringName" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="Logger.SampleApp.Client.Web"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="YourRoleProvider"
<providers>
<clear/>
<add name="YourRoleProvider" type="Logger.SampleApp.Security.Infrustructure.CustomRoleProvider" />"
</providers>
</roleManager>
ステップ2:
[Authorize]
HomeController の Index メソッドに属性を追加します。
ステップ 3:
セクションの下<appSettings>
:
<add key= "enableSimpleMembership" value= "false"/>
<add key= "autoFormsAuthentication" value= "false"/>
ステップ 4:
InitializeSimpleMembership
必要に応じて、 fromにコメントしてAccountController
ログイン アクションをオーバーライドします。