繁体   English   中英

自动分配默认角色

[英]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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM