Пример #1
0
        public async Task <IActionResult> OnPostChangeEmailAsync()
        {
            var user = await _userManager.GetUserAsync(User).ConfigureAwait(false);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user).ConfigureAwait(false);

                return(Page());
            }

            var email = await _userManager.GetEmailAsync(user).ConfigureAwait(false);

            if (Input.NewEmail != email)
            {
                if (_userManager.Options.SignIn.RequireConfirmedEmail)
                {
                    var userId = await _userManager.GetUserIdAsync(user).ConfigureAwait(false);

                    var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail).ConfigureAwait(false);

                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmailChange",
                        pageHandler: null,
                        values: new { userId, email = Input.NewEmail, code },
                        protocol: Request.Scheme);
                    await _emailSender.SendEmailAsync(
                        Input.NewEmail,
                        "Confirm your email",
                        $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.")
                    .ConfigureAwait(false);

                    StatusMessage = "Confirmation link to change email sent. Please check your email.";
                    return(RedirectToPage());
                }
                else
                {
                    user.Email = Input.NewEmail;
                    var result = await _userManager.UpdateAsync(user).ConfigureAwait(false);

                    if (result.Succeeded)
                    {
                        StatusMessage = "Your email has been updated.";
                    }
                    else
                    {
                        StatusMessage = $"Error: {string.Join(", ", result.Errors.Select(e => e.Description))}";
                    }
                    return(RedirectToPage());
                }
            }

            StatusMessage = "Your email is unchanged.";
            return(RedirectToPage());
        }