ASP.Net Identity 2.0:用户是System.Web.Security.RolePrincipal,为什么?

2024-04-25

我正在尝试在现有应用程序中实现 Asp.Net Identity 2.0 (OWIN),但在角色方面我遇到了各种麻烦。我从项目模板创建了一个示例项目,并且(据我所知)我已将其中的所有内容复制到我的应用程序中。我修改了连接信息,以便身份验证表来自我自己的 Sql 数据库,而不是默认的本地 DB。

一切似乎都很顺利。这些表在启动时初始化(创建),我可以创建一个新用户,为该用户分配角色,并以该用户身份登录。但是,当我尝试检查用户是否处于特定角色时,我收到一个异常,表明定位本地数据库出现问题。嗯,那是因为我没有使用本地数据库。那么为什么我的应用程序要在(不存在的)本地数据库中寻找角色呢?

为了排除我的 Sql 实例中的奇怪情况,我更改了示例应用程序的连接数据,以便它指向我的数据库并运行它。我可以使用在应用程序中创建的用户登录,甚至可以成功轮询用户是否有相关角色。我通过直接检查表并验证用户、角色和用户角色关联都存在来确认这一点。

但这是我确实注意到的。当我运行示例应用程序时,用户是一个实例System.Security.Claims.ClaimsPrincipal。但是当我运行我的应用程序时,用户是一个实例System.Web.Security.RolePrincipal.

那么,我错过了什么?为什么我的应用程序返回RolePrincipal代替ClaimsPrincipal?我可以去哪里寻找线索?

我正在为此绞尽脑汁,但我所剩无几了!任何帮助将不胜感激。


发生的情况是您的旧应用程序仍然连接到旧的会员代码。一些清单项目应该会让你回来......

确保删除 FormsAuthentication 模块(因为 MVC 5 不再使用它)

<modules>
  <remove name="FormsAuthenticationModule" />
</modules>

确保 SimpleMembership 已关闭(或者直接将其删除)

<add key="enableSimpleMembership" value="false"/>

And 最重要的部分是删除对 WebMatrix 的引用(MVC 5 中不再使用)。 WebMatrix 将自动注册预申请启动方法,这些方法将“尝试”为您的项目提供会员服务。详情请参阅此处 http://msdn.microsoft.com/en-us/library/webmatrix.webdata.preapplicationstartcode%28v=vs.111%29.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.Net Identity 2.0:用户是System.Web.Security.RolePrincipal,为什么? 的相关文章

随机推荐