【问题标题】:Custom Membership and Roles in MVC3 with Forms Authentication带有表单身份验证的 MVC3 中的自定义成员资格和角色
【发布时间】:2013-10-31 08:06:34
【问题描述】:

我在 MVC3 应用程序中为用户和角色使用自定义成员资格。我有自定义用户/角色类。我为此扩展了 RoleProvider 和 MembershipProvider 类。

我的应用程序中似乎有时会丢失角色,并且我的 Authorize [Roles='xyz'] 属性无法正常工作并尝试重定向到 Account/LogOn。当我的用户登录应用程序时,我所做的只是

if (ModelState.IsValid)
            {
                if (MyCustomSecurity.Login(model.UserName, model.Password, model.RememberMe))
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
--other stuff
}

MyCustomSecurity.Login 方法基本上是在数据库中查找用户,如果有效则返回一个真值。

在尝试调试我的应用程序的问题时,我遇到了以下链接

http://www.codeproject.com/Articles/578374/AplusBeginner-27splusTutorialplusonplusCustomplusF ASP.NET MVC Forms Authentication + Authorize Attribute + Simple Roles

我是否也应该重写此链接中提到的 FormsAuthentication_OnAuthenticate() ?还是 RoleProvider 扩展类负责这个?
谢谢你

【问题讨论】:

    标签: asp.net-mvc-3 roleprovider custom-membershipprovider


    【解决方案1】:

    如果你在AuthorizeAttribute中使用了角色,而角色是你自己的类,那么你需要重写RoleProvider,尤其是GetRolesForUser方法:

    public class CustomRoleProvider : RoleProvider
    {
        public override string[] GetRolesForUser(string username)
        {
        // put your logic to discover which roles the user has
        }
    }
    

    完成后,您必须在 Web.Config 中注册您的 CustomRoleProvider:

    <roleManager enabled="true" defaultProvider="CustomRoleProvider">
        <providers>
            <clear/>
            <add name="CustomRoleProvider" type="%YOURNAMESPACE%.CustomRoleProvider" />
        </providers>
    </roleManager>
    

    【讨论】:

    • 您好安德烈,感谢您的回复。我都做了,所以我假设我做得对吗?我似乎仍然遇到表单身份验证问题,突然在控制器/方法上使用 Authorize 进行 302 重定向循环。调试幕后发生的事情的最佳方法是什么。 Fiddler 告诉我角色/用户 cookie 仍然存在,但仍然存在 302 重定向到帐户/登录。任何帮助都会很棒。
    • 你知道我将如何调试 AuthorizeAttribute 吗?
    猜你喜欢
    • 2012-04-10
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多