-2

使用 VS 2015,我创建了一个带有默认身份验证内容的小型 MVC 应用程序。我只更改了帐户控制器注册操作中的代码:

var context = new ApplicationDbContext();
if (ModelState.IsValid)
{
    var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
    var result = await UserManager.CreateAsync(user, model.Password);

    var roleStore = new RoleStore<IdentityRole>(context);
    var roleManager = new RoleManager<IdentityRole>(roleStore);

    var userStore = new UserStore<ApplicationUser>(context);
    var userManager = new UserManager<ApplicationUser>(userStore);

    if (!roleManager.RoleExists("Administrator"))
    {
        roleManager.Create(new IdentityRole("Administrator"));
    }
    if (!roleManager.RoleExists("User"))
    {
        roleManager.Create(new IdentityRole("User"));
    }

    if (context.Users.Count() == 1)
    {
        userManager.AddToRole(user.Id, "Administrator");
    } else
    {
        try
        {
            userManager.AddToRole(user.Id, "User");
        }
        catch (Exception ex)
        {
            throw new Exception("Error assigning role: " + ex.Message);
        }
    }

第一个注册用户成为“管理员”。虽然 "userManager.AddToRole(user.Id, "User");" 不会引发异常,没有将以下注册用户分配给该角色(检查了表格以及每个 Authorize(Role...)。我不知道这里出了什么问题。

4

1 回答 1

0

我已经想通了。我使用了用户名中带有“+”的通用电子邮件地址,例如 user+01@mydomain.com。这在注册时不会造成麻烦,并且在尝试/捕获 AddRoleTo 方法时不会引发异常,但是在 AddRoleTo 的结果堆栈中出现一个错误,即用户名只允许使用字符和数字。

于 2017-10-12T08:46:56.813 回答