Как зарегистрировать использование с ролью в ядре .net? - PullRequest
0 голосов
/ 04 мая 2018

Я хочу создать нового пользователя с ролью. Я использую миграцию объектов. так что я получаю все таблицы по умолчанию. Без ролей я могу зарегистрировать нового пользователя, но когда я добавляю роли в раскрывающемся списке, я сталкиваюсь с ошибкой. Не удается преобразовать строку в ourproject.entitites.user

Пожалуйста, помогите и научите меня, где я совершил ошибку. Я новичок в технологии ядра .net.

У меня проблема с пользователем. Ид.

await _userManager.AddToRoleAsync(user.Id, model.UserRoles);

ControllerCode:

[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
    {        
    }
}

1 Ответ

0 голосов
/ 04 мая 2018

Вот функциональный код для .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);
    }
...