带有整数键的Identity 2.0:为什么User.IsInRole总是返回false?

时间:2014-11-05 11:48:16

标签: c# asp.net-mvc

使用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,一切都会正常工作。

2 个答案:

答案 0 :(得分:0)

尝试在用户登录时添加角色声明

答案 1 :(得分:0)

我解决了它:问题是我创建了一个派生自IdentityUser的类,另外我错误地启用了每个类型的表(TPT),添加了表名。 Identity 2.0在AspNetUserRoles中添加了第三列,指向这种新类型,因为它是null,所以没有角色。 现在,我使用Table Per Hierarchy(TPH),一切正常。