我喜欢MVC4Internet模板中新的simplemembership功能,该功能可以链接到VS2012RTM中用于外部登录的OAuth。在大多数情况下,身份验证功能都是有效的。然而,即使在这上面花费了超过8个小时,我仍然无法实现基于角色的授权来在我的控制器上工作。事实证明,SimpleMembership一点也不简单。
我已经搜索了stackoverflow,谷歌了,并阅读了John Galloway的最新版本,尝试了许多建议,但仍然无法解决这个问题。这一切都是从获取Sql连接错误开始的,当连接字符串和其他一切正常时,无法找出原因。花了几个小时才弄清楚是Roles类导致了问题。
控制器上的Authorize属性对基本身份验证的作用与以前一样。但是,每当我尝试使用角色时,它都会给出sql连接错误(因为它会恢复到旧的DefaultRolesProvider,它试图连接到默认的SqlExpress aspnetdb文件,但失败了)。所以就像这样:
[Authorize(Roles="admin")]
不起作用。如果我返回到旧的asp.net成员提供程序,它将工作,但然后我失去了简单的数据库表,令牌基础的确认和恢复,更安全的密码哈希,更重要的是通过OAuth的外部登录。
在代码和剃刀视图中唯一可以工作的是
User.IsInRole("admin")
这对于菜单项之类的是可以的,但在控制器中的每个单独的Action中实现起来都很麻烦(而且我不喜欢它一次只测试一个角色)。
我将非常感谢任何指导来解决这个问题。
发布于 2013-02-28 23:30:40
当我将我的web应用程序从VS2010/MVC3迁移到VS2012/MVC4时,也遇到了同样的问题。
而且不能让InitializeSimpleMembership工作。
我发现把这段代码添加到你的web.config中是有好处的:
<appSettings>
<add key="enableSimpleMembership" value="false" />
</appSettings>
一切都像以前一样运行良好。
https://stackoverflow.com/questions/12257232
复制相似问题