C# ASP.NET身份检查用户角色不工作
我有一个ASP.NETMVC5应用程序。我正在使用标准ASP.NET身份提供程序进行用户和角色管理。我使用自己的存储库项目中的IdentityUser是很重要的,但这似乎还可以。我可以注册、登录、编辑用户并管理他们的角色 我使用以下行将用户添加到角色:C# ASP.NET身份检查用户角色不工作,c#,asp.net,asp.net-mvc,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Identity,我有一个ASP.NETMVC5应用程序。我正在使用标准ASP.NET身份提供程序进行用户和角色管理。我使用自己的存储库项目中的IdentityUser是很重要的,但这似乎还可以。我可以注册、登录、编辑用户并管理他们的角色 我使用以下行将用户添加到角色: UserManager.AddToRole(userdetail.Id, r); db.Entry(userdetail).State = EntityState.Modified; db.SaveChanges(); 这似乎在DB级别工作 但
UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
这似乎在DB级别工作
但是,我不能使用基于角色的身份验证,实际上是简单的身份验证
HttpContext.User.IsInRole("Administrator")
不太管用
[Authorize(Roles="Administrator")]
不太管用
[Authorize(Roles="Administrator")]
我只能使用此方法检查用户是否为管理员:
UserManager.IsInRole(userID, "Administrator").
为什么?
在我发现的每个教程中,一切都很好。不同的项目存储库可能是原因?还是ASP.NET的身份被破坏了这么多
请注意,您的web.config中是否有此条目
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
</providers>
</roleManager>
另外,如果我没记错的话,在不同版本的.NET中,角色提供程序程序集有不同的命名空间。似乎存在问题。[设计问题]
- 角色名称在AuthorizeAttribute和User.IsInRole中区分大小写
- UserManager.IsInRole中的角色名称不区分大小写
如果我们将属性更改为
[Authorize(Roles=“admin”)]
,它将重定向到登录页面。在这种情况下,您需要注销并再次登录用户
因为角色数据也存储在cookie中,
因此,您必须再次发布cookie才能使用它。您是在谈论最新的ASP.NET MVC 5和ASP.NET标识吗?roleManager用于角色提供程序()它基本上已被弃用,并且不是ASP.NET标识作为请求。我也有同样的问题。有什么解决办法吗?答案已经公布了。接受它。您也可以通过更新安全标记来实现同样的功能,而无需再次登录和注销用户。你知道如何绕过这个问题吗?我也有同样的问题。我使用自定义用户和角色存储,但我猜应该注意,但使用管理器,而不是通过用户和注释,效果很好。这救了我的命,我不知道为什么这个答案不被接受。没有其他人提到这一点。在谷歌上查找“Identity userinrole”,你会看到不准确的“User.IsInRole”区分大小写,这只是犯罪,一定是个bug。我在自己的代码中发现了这一点,只是在浪费了大量时间后才找到了这个答案。把你的答案弄糟!我不知道为什么这个答案被接受。我在控制器上使用了Authorize属性,大小写与我的角色完全相同,拼写与我的角色完全相同,我肯定被分配到了这个角色(我通过RoleManager调用进行了检查,并查看了数据库本身),但它仍然不让我进入。这是在一个.Net核心API项目中。@ataraxia在本例中,原始问题明确指出Authorize属性和User.IsInRole不起作用,但UserManager.IsInRole起作用。这些返回不同的已知原因是区分大小写,即这个答案。在你的情况下,这可能是一个不同的问题。尝试并复制原始,即检查UserManager.IsInRole是否有效。如果UserManager(不区分大小写)也不起作用,则您会遇到与原始海报不同的问题(例如cookie中的缓存数据)。