User.IsInRole返回false

Hak*_*emi 7 asp.net-mvc roles asp.net-identity

我在mvc 5网站上使用Identity 2进行身份验证.在我看来,我想检查用户的角色:

@if(User.IsInRole("Customers"))
{
  @*do something*@
}
Run Code Online (Sandbox Code Playgroud)

但这总是返回false,我已经<roleManager enabled="true" />在web配置中设置 了.请帮忙.

Luk*_*uke 7

我只是使用我的设置也使用Identity Framework.

我使用以下代码将用户添加到角色:

this.RoleManager.CreateAsync(new Role() {Name  = "Customers"});

this.UserManager.AddToRoleAsync(this.User.Identity.GetUserId<int>(), "Amazing");
Run Code Online (Sandbox Code Playgroud)

然后在那之后的任何时候,当我跑的时候User.IsInRole("Customers");它返回假,直到我重新将它们重新插入.

将用户添加到角色后,您需要重新登录用户.角色信息存储在cookie中.

我运行以下内容再次登录用户:

var user = await this.UserManager.FindByNameAsync("bob");
var identity = await this.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

this.AuthManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
Run Code Online (Sandbox Code Playgroud)

从这一点开始,User.IsInRole("Customers")为我工作并返回true.

除非您可以在应用程序中验证它是否知道要将其添加到的角色,否则这将无效.您可以通过以下方式使用RoleManager验证角色"Customers"的存在:

var roleExists = (this.RoleManager.FindByNameAsync("Customers").Result != null);
Run Code Online (Sandbox Code Playgroud)