Asp.net core ASP.NET标识和User.IsInRole
我将项目从成员资格提供程序移动到ASP.NET标识,添加了以下角色管理器:Asp.net core ASP.NET标识和User.IsInRole,asp.net-core,claims-based-identity,asp.net-identity-2,Asp.net Core,Claims Based Identity,Asp.net Identity 2,我将项目从成员资格提供程序移动到ASP.NET标识,添加了以下角色管理器: public class ApplicationRoleManager : RoleManager<ApplicationRole> { public ApplicationRoleManager(RoleStore<ApplicationRole> store) : base(store) { } public static Applica
public class ApplicationRoleManager : RoleManager<ApplicationRole>
{
public ApplicationRoleManager(RoleStore<ApplicationRole> store)
: base(store)
{ }
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options,
IOwinContext context)
{
return new ApplicationRoleManager(new
RoleStore<ApplicationRole>(context.Get<ApplicationDbContext>()));
}
}
已添加记录,但User.IsInRole不起作用。为什么以及如何修复?声明和角色不同,请参阅和。您应该使用
AddToRoleAsync
方法,该方法包含在UserManager
中。这里有一个例子
var user = new ApplicationUser
{
Username = "Rob@Microsoft.com",
Email = "Rob@Microsoft.com"
};
var result = await _userManager.CreateAsync(user, "P@ssw0rd");
if (result.Succeeded)
{
await _userManager.AddToRoleAsync(user, "Admin");
}
最好使用
AddToRoleAsync
方法-它做的事情非常相似,您不必自己做。另外,如果内部实现发生更改,您就不必更新代码
至于User.IsInRole
不起作用-我怀疑它在您通话后不会立即起作用。但是,如果您注销用户并再次登录,您将看到该角色已就位。这是因为User.IsInRole
检查cookie,其中asaddclairsync
将声明添加到数据库中。并且cookie不会在每次调用时从DB刷新,因此在查看cookie时,您不会在DB中看到新添加的信息。有很多方法可以迫使这一点,但这是超越这个问题的
var user = new ApplicationUser
{
Username = "Rob@Microsoft.com",
Email = "Rob@Microsoft.com"
};
var result = await _userManager.CreateAsync(user, "P@ssw0rd");
if (result.Succeeded)
{
await _userManager.AddToRoleAsync(user, "Admin");
}