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

时间:2014-09-16 02:54:52

标签: asp.net asp.net-identity owin

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

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

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

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

那么,我错过了什么?为什么我的应用返回RolePrincipal而不是ClaimsPrincipal?我在哪里可以寻找线索?

我把头发拉出来,我没有多少离开!任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:11)

正在发生的事情是您的旧应用程序仍然与旧的会员代码挂钩。一些清单项目应该会让你回来......

确保删除FormsAuthenticationModule(因为MVC5不再使用它)

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

确保关闭SimpleMembership(或者只是删除它)

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

最重要的部分是删除对WebMatrix的引用(不再在MVC 5中使用)。 WebMatrix将自动注册预先应用程序启动方法,这些方法将“尝试”为您的项目提供成员资格服务。 See here for details

答案 1 :(得分:4)

我还必须删除RoleManager:

rollforward database X 
    to end of backup and complete
    overflow log path (/path/to/write/files)