如何在 C# MVC4 中基于表单的身份验证添加两个不同的登录名 url?

How to add two different login url in form based authentication in C# MVC4?

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

当我使用自定义成员资格提供程序时,我还配置了自定义角色提供程序,然后将以下行添加到我的 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 步:

评论来自 AccountControllerInitializeSimpleMembership 并根据要求覆盖登录操作。

我们无法在 webconfig 中设置两个用于登录的登录 URL file.If 我们创建了自己的自定义会员提供程序,我们必须将其设置为默认提供程序,以使 [Authorize] 属性对其有效。但就我而言,有两个提供者。两者都是自定义提供程序,不允许我更改默认提供程序。一个提供程序用于管理员登录(默认提供程序),另一个提供程序用于用户登录(自定义提供程序)。在 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 的用户登录页面