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());
    }
示例#2
0
        public async Task <IActionResult> OnPostAddUserToRoleAsync(string userId, string roleId)
        {
            await _userRoleMembershipService.AddUserToRoleAsync(userId, roleId);

            return(RedirectToPage("./Role", new { roleId }));
        }