使用Identity 2.0,我已修改为使用整数作为主键 http://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity
它很有效,除非从控制器,我打电话:
User.IsUserInRole("admin");
它总是返回false。我检查了基础表,数据没问题。
但是,如果我这样做:
var t = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
bool ok = t.IsInRole(User.Identity.GetUserId<int>(), "admin");
然后它工作正常。问题似乎只出现在Controller.User
此外,属性不起作用,例如[Authorize(Roles = "admin")]
有人遇到过同样的问题吗?
更新:
与控制器无关,Thread.CurrentPrincipal
有同样的问题:
Thread.CurrentPrincipal.IsInRole("admin");
更新2:
似乎问题出在AspNetUserRoles表中。 Identity添加了一个新列,一个外键到我的扩展用户表。对我来说似乎是多余的,因为有UserId列。问题是此列的所有值都为NULL。我想如果我能够理解如何重定向到UserId,一切都会正常工作。
答案 0 :(得分:0)
尝试在用户登录时添加角色声明
答案 1 :(得分:0)
我解决了它:问题是我创建了一个派生自IdentityUser的类,另外我错误地启用了每个类型的表(TPT),添加了表名。 Identity 2.0在AspNetUserRoles中添加了第三列,指向这种新类型,因为它是null,所以没有角色。 现在,我使用Table Per Hierarchy(TPH),一切正常。