Пример #1
0
        public async Task <IActionResult> OnPostAsync(RegisterViewModel registerViewModel,
                                                      [FromQuery] string code = "")
        {
            var userCode = _context.InvitationEntityModels.FirstOrDefault(t => t.Code == code);

            if (userCode == null)
            {
                return(BadRequest("Code invalid"));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var appUser = RoleHelper.CreateUser(userCode.Role);

            appUser.FirstName   = registerViewModel.FirstName;
            appUser.LastName    = registerViewModel.LastName;
            appUser.Email       = userCode.Email;
            appUser.PhoneNumber = registerViewModel.Phone;
            appUser.UserName    = registerViewModel.Username;
            var result = await _userManager.CreateAsync(appUser, registerViewModel.Password);

            if (result.Succeeded)
            {
                _logger.LogInformation("User created a new account with password.");
                await _userManager.AddToRoleAsync(appUser, RoleHelper.GetRole(userCode.Role));

                if (_userManager.Options.SignIn.RequireConfirmedAccount)
                {
                    return(RedirectToPage("RegisterConfirmation",
                                          new { email = registerViewModel.Email }));
                }

                await _signInManager.SignInAsync(appUser, false);

                return(LocalRedirect(Url.Action("Index", "Home")));
            }

            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Description);
            }

            return(BadRequest(ModelState));
        }