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