public async Task <IActionResult> UpdateEmail(ChangeEmailInput input)
        {
            // This says, "look, I don't care how it's done. Here's the input, go figure it out.
            // Let me know how it went...
            await changeEmail.ExecuteAsync(input);

            // Note:
            // We're obviously lacking some exception handling.
            // I'll let you deal with that. It's outside the scope of what
            // I'm trying to accomplish.

            return(Ok());
        }
        public async Task <IActionResult> ChangeEmail([FromBody] ChangeEmailInput emailInput)
        {
            var user = await _userManager.GetUserAsync(User);

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

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

            var email = await _userManager.GetEmailAsync(user);

            if (emailInput.NewEmail != email)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                var code = await _userManager.GenerateChangeEmailTokenAsync(user, emailInput.NewEmail);

                var callbackUrl = $"/api/Account/ConfirmEmailChange?userId={userId}&email={emailInput.NewEmail}&code={code}";
                await _emailSender.SendEmailAsync(
                    emailInput.NewEmail,
                    "Confirm your email",
                    $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                return(Ok(new StatusResponse()
                {
                    Status = "Confirmation link to change email sent. Please check your email."
                }));
            }

            return(Ok(new StatusResponse()
            {
                Status = "Your email is unchanged."
            }));
        }
        public async Task <IActionResult> UpdateEmail(ChangeEmailInput input)
        {
            await dispatcher.DispatchAsync(new ChangeEmailCommand(input.OldEmail, input.NewEmail));

            return(Ok());
        }