asp.net-core - 如何在.net core 中注册使用角色?
问题描述
我想创建一个具有角色的新用户。我正在使用实体迁移。所以我得到了所有默认表。没有角色,我可以注册一个新用户,但是当我添加角色下拉列表时,我遇到了一个错误无法从字符串转换为 ourproject.entitites.user
请帮助并教我我在哪里做错了。我是 .net 核心技术的新手。
我遇到了 user.Id 的问题
await _userManager.AddToRoleAsync(user.Id, model.UserRoles);
控制器代码:
[HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterUserModel model)
{
if (ModelState.IsValid)
{
var user = new User { UserName = model.Username, Email = model.Email,
PhoneNumber = model.PhoneNumber };
//var phoneNo = new User { PhoneNumber = model.PhoneNumber };
var createResult = await _userManager.CreateAsync(user, model.Password);
if (createResult.Succeeded)
{
await _userManager.AddToRoleAsync(user.Id, model.UserRoles);
return RedirectToAction("Details", "Home");
}
else
{
ViewBag.Name = new SelectList(_Context.Roles.Where(u => !u.Name.Contains("Admin"))
.ToList(), "Name", "Name");
foreach (var error in createResult.Errors)
{
ModelState.AddModelError("", error.Description);
}
}
}
return View();
}
注册型号代码:
public class RegisterUserModel
{
[Required,MaxLength(256)]
public string Username { get; set; }
[Required, DataType(DataType.Password)]
public string Password { get; set; }
[Required, DataType(DataType.Password), Compare(nameof(Password))]
public string ConfirmPassword { get; set; }
[Required, DataType(DataType.EmailAddress),MaxLength(256)]
public string Email { get; set; }
[Required,DataType(DataType.PhoneNumber)]
public string PhoneNumber { get; set; }
[Display(Name ="UserRoles")]
public string UserRoles { get; set; }
}
用户实体代码:
使用 Microsoft.AspNetCore.Identity;
namespace OurProject.Entities
{
public class User : IdentityUser
{
}
}
解决方案
这是 .net core 2.0 的功能代码。在 AddToRoleAsync 方法中,我发送用户对象本身。
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
string roleName = "Manager";
var isExistRole = await this._roleManager.RoleExistsAsync(roleName);
if (!isExistRole)
{
await this._roleManager.CreateAsync(
new IdentityRole
{
Id = Guid.NewGuid().ToString(),
Name = roleName
});
}
await _userManager.AddToRoleAsync(user, roleName);
return RedirectToLocal(returnUrl);
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
推荐阅读
- c# - 为什么“€”字符只在打印机初始化之前打印,而不是在初始化之后?
- javascript - 为什么我得到 ENONET:当文件存在时没有这样的文件或目录?节点.js
- regex - Datadog 正则表达式查找具有双引号的文本
- javascript - 创建 2 个子 Div 的细分并在附加的子 Div 上添加动态唯一 ID?
- java - Mongock 和 @Value 注释似乎不起作用
- apache-kafka - kafka生产者的多个实例
- java - Java Swing JLabel.setIcon() 没有按我预期的方式工作
- javascript - 当我在 laravel 5.8 中使用删除确认时传递 id 的问题
- javascript - 背景遮罩和 react-particles-js 3.0 的问题
- python - 第一个python项目:Boggle