【发布时间】:2013-08-05 15:01:47
【问题描述】:
我为自定义成员和角色提供者开发了自己的类。
一切都在本地工作。尽管如此,在将解决方案部署到 IIS 进行测试后,我的登录操作似乎有效(至少,该操作验证了用户名+密码并且用户似乎已通过身份验证)但是每当我尝试访问带有注释的操作时,例如
[Authorize(Roles="Employee, Admin")]
我不断被重定向到登录页面,好像用户没有必要的角色(但他有)。
因此,在本地,应用程序在执行操作之前成功地验证了用户并检查了经过身份验证的用户的角色(因此,我假设我在两个类上的方法都是正确的)但在 IIS 上,角色提供程序似乎无法正常工作。任何人碰巧知道我可能错在哪里,或者我怎样才能更好地了解我的问题?
在我的 Web.Config 中:
<system.web>
(...)
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear />
<add name="CustomMembershipProvider" type="MyApplication.Infrastructure.CustomMembershipProvider" connectionStringName="DBEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="CustomRoleProvider">
<providers>
<clear />
<add name="CustomRoleProvider" type="MyApplication.Infrastructure.CustomRoleProvider" connectionStringName="DBEntities" applicationName="/" />
</providers>
</roleManager>
(...)
</system.web>
提前致谢。
编辑:附加信息。
我刚刚将我的一个操作注释修改为简单的 [Authorize] 并且它可以工作。因此,我认为身份验证有效,问题一定与角色提供者有关。
-
我正在为我的数据模型使用实体框架,即 con。字符串如下:
我设法注册了一个用户并使用新创建的帐户登录,这意味着数据库连接和自定义成员资格提供程序(?)工作正常。
A "@foreach (String str in Roles.GetRolesForUser(User.Identity.Name)){@str} 在本地打印角色,部署时不打印任何内容。
【问题讨论】:
-
连接字符串如何?
-
您确定角色存在并且用户已被分配到他们的角色?
-
是的,只是仔细检查了一遍。我用于本地测试的数据库实例与我在部署到 IIS 时使用的数据库实例相同。因此,如果角色存在并且在本地被识别,则问题不应该存在。
-
角色提供者显然有问题,因为当您尝试将它们全部打印出来时,它什么也没打印,请验证您的自定义提供者的 GetAllRoles 代码
-
是的,塞尔吉奥,我刚刚这样做并发现了问题。谢谢。
标签: asp.net-mvc iis asp.net-mvc-4 custom-membershipprovider