我为自定义成员和角色提供者开发了自己的类。
一切都在本地工作。尽管如此,在将解决方案部署到 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} 在本地打印角色,部署时不打印任何内容。