自动分配默认角色
Automatically assign default role
如何自动为注册用户分配默认角色。我正在尝试这个,但它不工作,我收到错误:
[ProviderException: The role 'Member' was not found.]
我就是这样做的:
设置我的默认角色,使其从一开始就存在:
// Configuration.cs, Seed method.
if (!context.Roles.Any(r => r.Name == "Member"))
{
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store);
var role = new IdentityRole { Name = "Member" };
manager.Create(role); // Member role gets created in AspNetRoles table.
}
比更新数据库后,我将注册用户添加到该角色:
// AccountController, Register method (POST).
var user = new ApplicationUser { ... }
if (.. Succeeded)
{
..
if (!Roles.IsUserInRole(user.UserName, "Member"))
Roles.AddUserToRole(user.UserName, "Member");
return RedirectToAction("Index", "Home");
}
注册新账号时出现错误:
[ProviderException: The role 'Member' was not found.] // Member exits in AspNetRoles
Line 176: if (!Roles.IsUserInRole(user.UserName, "Member"))
Line 177: Roles.AddUserToRole(user.UserName, "Member");
我认为您使用了错误的角色管理器。 Roles
很可能是 Simple Membership
角色提供者,而不是来自 Identity
的角色提供者。尝试以下操作:
if (.. Succeeded)
{
..
// if (!await UserManager.IsInRoleAsync(user.Id, "Member"))
await UserManager.AddToRoleAsync(user.Id, "Member");
return RedirectToAction("Index", "Home");
}
我注释掉了 IsInRoleAsync
-check,因为如果您刚刚创建了用户,IMO 不需要它。
如果尚未完成,您需要创建一个异步操作才能使用 async
/await
:
public async Task<ActionResult> Register(RegisterModel model)
如何自动为注册用户分配默认角色。我正在尝试这个,但它不工作,我收到错误:
[ProviderException: The role 'Member' was not found.]
我就是这样做的:
设置我的默认角色,使其从一开始就存在:
// Configuration.cs, Seed method.
if (!context.Roles.Any(r => r.Name == "Member"))
{
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store);
var role = new IdentityRole { Name = "Member" };
manager.Create(role); // Member role gets created in AspNetRoles table.
}
比更新数据库后,我将注册用户添加到该角色:
// AccountController, Register method (POST).
var user = new ApplicationUser { ... }
if (.. Succeeded)
{
..
if (!Roles.IsUserInRole(user.UserName, "Member"))
Roles.AddUserToRole(user.UserName, "Member");
return RedirectToAction("Index", "Home");
}
注册新账号时出现错误:
[ProviderException: The role 'Member' was not found.] // Member exits in AspNetRoles
Line 176: if (!Roles.IsUserInRole(user.UserName, "Member"))
Line 177: Roles.AddUserToRole(user.UserName, "Member");
我认为您使用了错误的角色管理器。 Roles
很可能是 Simple Membership
角色提供者,而不是来自 Identity
的角色提供者。尝试以下操作:
if (.. Succeeded)
{
..
// if (!await UserManager.IsInRoleAsync(user.Id, "Member"))
await UserManager.AddToRoleAsync(user.Id, "Member");
return RedirectToAction("Index", "Home");
}
我注释掉了 IsInRoleAsync
-check,因为如果您刚刚创建了用户,IMO 不需要它。
如果尚未完成,您需要创建一个异步操作才能使用 async
/await
:
public async Task<ActionResult> Register(RegisterModel model)