public async Task <IActionResult> OnPostAsync(string captcha, string inviteCode, string email, string?returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (!await _captchaValidator.IsCaptchaPassedAsync(captcha)) { ModelState.AddModelError("captcha", "Captcha validation failed"); } if (ModelState.IsValid) { if (Input is null) { throw new Exception("Input is null."); } var user = new ApplicationUser { UserName = email, Email = email }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); var newUserEvent = new NewUserRegisteredEvent(email, Request.HttpContext.Connection.RemoteIpAddress !.ToString()); await _dispatcher.Dispatch(newUserEvent); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var userId = user.Id; var emailConfirmationResult = await _userManager.ConfirmEmailAsync(user, code); if (!emailConfirmationResult.Succeeded) { throw new InvalidOperationException($"Error confirming email for user with ID '{userId}':"); } await _newMemberService.MemberSetupAsync(userId, Input.FirstName !, Input.LastName !, inviteCode !, email); _logger.LogInformation($"Adding user {user.Email} to Member Role"); var roles = await _roleManager.Roles.ToListAsync(); var memberRole = roles.FirstOrDefault(r => r.Name == "Member"); if (memberRole != null) { await _userRoleMembershipService.AddUserToRoleAsync(userId, memberRole.Id); } return(RedirectToRoute("/User/MyProfile")); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }
public async Task <IActionResult> OnPostAddUserToRoleAsync(string userId, string roleId) { await _userRoleMembershipService.AddUserToRoleAsync(userId, roleId); return(RedirectToPage("./Role", new { roleId })); }