在过去的两天里,我进行了一场小型战斗,尽管我已经解决了它,但它并没有达到我的预期。
Visual Studio 2013上的ASP.NET 4.5。
如果您创建一个新项目并首次启动它并注册,那么一切都很好。
它创建一个名为AspNetUsers的表,并将您放入该表中。
它还创建其他表(包括但不限于)-AspNetRoles-存储角色-AspNetUserRoles-将用户存储在角色中
因此,我首先使用数据库为所有3个表创建模型和控制器,以便可以从一个界面进行管理(我知道VS2010内置了某些东西,但似乎已经消失了,因为我学会了如何做数据库就不用担心了第一的)
问题是当我向角色添加用户时,数据显示在数据库中,但是当我尝试使用装饰器锁定控制器方法时:
[Authorize(Roles="admin")]
public string test()
{
return "hello";
}
一切开始变得梨形。
所以我测试了User.IsInRole(“ admin”),令我沮丧的是它返回了false!
所以我走了web.config的旅程(这告诉角色管理器指向我的DefaultConnection(我用于所有操作))
<roleManager enabled="true" defaultProvider="SqlRoleManager">
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="DefaultConnection"
applicationName="ConferenceOrg" />
</providers>
</roleManager>
然后在我使用的代码中:
string role = "admin";
if (!Roles.RoleExists(role))
{
Roles.CreateRole(role);
}
else
{
string[] usrs = { User.Identity.Name };
if (!User.IsInRole(role))
{
Roles.AddUsersToRole(usrs, role);
}
}
最初,这不起作用,因为不存在存储过程。因此,我转到了C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ Tools \ Shortcuts,并启动了本机工具Cmd提示符(x86),并使用它来添加存储过程等
现在,上面的代码可以工作了,但是除了原始集合外,它还创建了一大堆表。
该代码在新的aspnet_roles表中创建角色,现在它同时在AspNetUsers和aspnet_users中创建我的用户
因此,我的下一步是先删除我使用数据库创建的表,然后将其重做为aspnet_表...
不开心,但是会成功。对我的情况有什么想法吗?
我做对了吗?
您的项目中混有Legacy SQL Membership Provider和New ASP.Net Identity。
您只需要一个成员身份,即新ASP.Net身份。
在ASP.Net Identity中,您不需要在web.config中 配置任何设置(对于owin除外AppStartup)。
现在,您的数据库一团糟。由于您的应用程序是新的并且没有现有用户,因此可以轻松地重新创建新的应用程序和新的数据库,然后重新开始。
然后,确保用户和角色都分配给AspNetUserRoles表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句