0

我有一个管理员登录页面,另一个普通用户登录页面。我已经为一般用户部分创建了一个自定义成员资格提供程序,现在我想在 web.config 文件中提供表单身份验证。怎么做 ?

4

2 回答 2

2

我们不能在 webconfig 文件中设置两个登录 url。如果我们创建自己的自定义成员资格提供程序,我们必须将其设置为默认提供程序,以使 [Authorize] 属性对其可用。但就我而言,有两个提供者。两者都是自定义提供程序,并且不允许我更改默认提供程序。一个提供程序用于管理员登录(默认提供程序),另一个提供程序用于用户登录(自定义提供程序)。在 web config 表单中启用了身份验证

<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步:

为 HomeController 的 Index 方法添加[Authorize]属性。

第 3 步:

在以下<appSettings>部分:

<add key= "enableSimpleMembership" value= "false"/>
<add key= "autoFormsAuthentication" value= "false"/>

第4步:

InitializeSimpleMembership根据要求评论AccountController并覆盖登录操作。

于 2015-04-22T10:46:05.703 回答