0

管理者用のログイン ページと、一般ユーザー用のログイン ページがあります。一般ユーザー セクション用のカスタム メンバーシップ プロバイダーを作成したので、web.config ファイルでフォーム認証を行いたいと思います。どうやってするか ?

4

2 に答える 2

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 のユーザー ログイン ページに誘導されます

于 2015-05-06T02:39:33.247 に答える
1

カスタム メンバーシップ プロバイダーを使用する場合、カスタム ロール プロバイダーも構成し、次の行を 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ログイン アクションをオーバーライドします。

于 2015-04-22T10:46:05.703 に答える