我有MVC4应用程序使用SimpleMEmbershipProvider认证机制。SimpleMembershipProvider角色不可访问
一切工作正常,除了当我回到应用程序和使用持久cookie进行身份验证。
我已通过身份验证,但无法访问分配给我的角色。实际上,不能访问角色都:
string.Join(",", Roles.GetRolesForUser(User.Identity.Name))
返回空字符串
可能是什么造成的?
我有MVC4应用程序使用SimpleMEmbershipProvider认证机制。SimpleMembershipProvider角色不可访问
一切工作正常,除了当我回到应用程序和使用持久cookie进行身份验证。
我已通过身份验证,但无法访问分配给我的角色。实际上,不能访问角色都:
string.Join(",", Roles.GetRolesForUser(User.Identity.Name))
返回空字符串
可能是什么造成的?
当SimpleMembershipProvider尚未初始化时,可能会发生这种情况。示例MVC表单认证模板假定您将允许匿名访问您的网站,并且不会初始化成员资格提供者,直到您进入登录页面。但是,更常见的安全技术是需要登录才能访问任何站点,并在_layout页面中定义菜单选项以确定角色。但是,如果您使用持久性cookie,则不会重新访问登录页面,因此不会从成员资格数据库加载已认证用户的角色。
你想要做的是在用户进入站点时初始化提供程序,以便加载值。要做到这一点,你需要添加以下过滤器中的一个FilterConfig类的RegisterGlobalFilters方法在App_Start文件夹
filters.Add(new YourAppNameSpace.Filters.InitializeSimpleMembershipAttribute());
这将导致从数据库加载用户数据时,一个cookie认证的用户进入网站。
另一种替代方法是将[InitializeSimpleMembership]修饰符添加到cookie身份验证用户可直接输入的任何控制器方法。如果你必须把它放在很多控制器上,这有点乱。因此,在大多数情况下,将其放入全局过滤器中会更好。
非常感谢。你是一个拯救生命的人! – Bartosz 2013-04-25 21:10:20
Filters.InitializeSimpleMembershipAttribute()不存在。 – user2254436 2014-06-10 11:14:21