【发布时间】:2019-09-19 13:42:28
【问题描述】:
下面的代码让我很头疼。如您所见,我有一个非常标准的 AccountController 和“注册”方法。注册后,用户应被赋予“Module_All__Admin”角色。代码似乎正确,“resultAssigningRole.Succeeded”返回 true...为什么我的 SQL 数据库中的“AspNetUserRoles”表为空?
注意:连接字符串工作正常,在一个单独的控制器中我填写了“AspNetRoles”表并且它工作正常。
public class AccountController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly RoleManager<IdentityRole> _roleManager;
private readonly ILogger _logger;
private readonly IEmailSender _emailSender;
public AccountController(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager,
RoleManager<IdentityRole> roleManager,
ILoggerFactory loggerFactory,
IEmailSender emailSender
)
{
_userManager = userManager;
_signInManager = signInManager;
_roleManager = roleManager;
_logger = loggerFactory.CreateLogger<AccountController>();
_emailSender = emailSender;
}
public async Task<IActionResult> Register(LoginViewModel loginViewModel)
{
if (ModelState.IsValid)
{
IdentityUser user = new IdentityUser() { UserName = loginViewModel.Email };
IdentityResult resultCreatingUser = await _userManager.CreateAsync(user, loginViewModel.Password);
if (resultCreatingUser.Succeeded) //this returns true
{
if (await _roleManager.RoleExistsAsync("Module_All__Admin"))
{
IdentityResult resultAssigningRole = await _userManager.AddToRoleAsync(user, "Module_All__Admin");
if (resultAssigningRole.Succeeded) //this returns true
{
await _signInManager.SignInAsync(user, isPersistent: false);
_logger.LogInformation(3, "User created, assigned to role 'AllModules - User'");
}
else
{
var errors = resultAssigningRole.Errors;
var message = string.Join(", ", errors);
ModelState.AddModelError("", message);
}
}
return RedirectToAction("LoggedIn", "Account");
}
}
return View("~/Views/Home/Index.cshtml");
}
}
编辑 大家,这似乎是 ASP.NET CORE 中的一个错误。我在 github 中发现,确保您的服务设置为这样可以解决这种情况:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders();
它对我有用。
【问题讨论】:
-
你能添加connectionString(自然没有UserCredentials)吗?
-
用户和角色是否生成成功?如何创建角色?参考stackoverflow.com/questions/42471866/…
标签: asp.net-core