2016-12-14 20 views
0

ユーザーを正常に作成した後にロールにユーザーを追加しようとしています。アイデンティティusermanagerがロールを見つけることができません

public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null) 
{ 
    ViewData["ReturnUrl"] = returnUrl; 
    if (!ModelState.IsValid) return View(model); 
    var user = new ApplicationUser 
    { 
     UserName = model.PhoneNumber, 
     PhoneNumber = model.PhoneNumber, 
     NationalId = model.NationalId, 
     FullName = model.FullName 
    }; 
    var result = await _userManager.CreateAsync(user, model.NationalId); 
    if (result.Succeeded) 
    { 
     var res = await _userManager.AddToRoleAsync(user, "Admin"); 
     await _signInManager.SignInAsync(user, false); 
     _logger.LogInformation(3, "Applicant created a new account with password."); 
     return RedirectToLocal(returnUrl); 
    } 
    AddErrors(result); 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

ただし、このエラーが発生します。

要求の処理中に未処理の例外が発生しました。

InvalidOperationException:ロールADMINが存在しません。

更新: 私は

var myrole = await _roleManager.FindByNameAsync("Admin"); 

と呼ばれ、それがnullを返さ。私は

var roles = _roleManager.Roles 

を検査するとき、私は「管理者」私はシード方法で問題を発見した

+0

ユーザーを追加する前に 'IdentityRole'を作成しましたか? – tmg

+0

確かに、シードメソッドでロールが作成され、データベースに存在することが確認されました – Osama

答えて

0

を含むすべての役割を取得します。しかし、私はそれを理解していない。

シードメソッドでは、役割を追加するためにRoleStoreを使用しました。

var roles = new[] {"Admin", "Applicant", "Student", "Role1", "Role2", "Role3", "Role4"}; 
     foreach (var role in roles) 
     { 
      var roleStore = new RoleStore<IdentityRole>(context); 

      if (!context.Roles.Any(r => r.Name == role)) 
       await roleStore.CreateAsync(new IdentityRole(role)); 
     } 

データベーステーブルAspNetRolesで正常に作成されたロール。

しかし、行動を起こしたときは、役割は決して見つかりませんでした。

私はRoleManager

await _roleManager.CreateAsync(new IdentityRole(role)); 

でRoleStoreを交換し、魔法のように、すべてが働きました。私はその差異とそれをもっと理解する原因について、さらに研究していくつもりです。

関連する問題