Potwierdzenie emaila

0

Cześć. Tworzę API. API po rejestracji wysyła link aktywacyjny. Właśnie ale jak ten link ma wyglądać ?

        [HttpPost("register")]
        [AllowAnonymous]
        public async Task<IActionResult> Register([FromBody]RegisterDTO registerDTO)
        {
            try
            {
                var user = new ApplicationUser(registerDTO.Email, registerDTO.UserName, registerDTO.FirstName, registerDTO.LastName);

                var result = await userManager.CreateAsync(user, registerDTO.Password);

                if (!result.Succeeded)
                {
                    return StatusCode(StatusCodes.Status409Conflict);
                }

                await userManager.AddToRoleAsync(user, Roles.User);

                var newUser = await userManager.FindByEmailAsync(user.Email);

                await userManager.SetEmailAsync(newUser, newUser.Email);


                string message = await PrepareEmailContentAsync(newUser);

                const string title = "Confirm your email";

                await emailSender.SendEmailAsync(newUser.Email, title, message);

                return Ok(new { username = user.UserName, email = user.Email, status = 1, message = "Registration Successful" });
            }
            catch (Exception e)
            {
                return StatusCode(StatusCodes.Status500InternalServerError, e);
            }
        }

Tak wygląda endpoint register a tak funkcja prepare:

        private async Task<string> PrepareEmailContentAsync(ApplicationUser user)
        {
            var code = await userManager.GenerateEmailConfirmationTokenAsync(user);

            var encodedCode = HttpUtility.UrlEncode(code);

            var url = ??????

            return string.Format("Please confirm your account by <a href =\"{0}\">clicking here</a>.", url);
        }
1
            var url = string.Format("{0}#/new-password?userId={1}&code={2}",

Część URL za # nie jest przesyłana do serwera, więc o ile nie masz na tej stronie jakiegoś kodu JS, który wyciąga te wartości z URL w przeglądarce, to serwer nigdy ich nie zobaczy.

var result = await userManager.CreateAsync(user, registerDTO.Password);
...
await userManager.AddToRoleAsync(user, Roles.User);
...

Nazewnictwo sugeruje, że oprócz MetodaAsync() istnieje też Metoda() - nie prościej wołać wersje synchroniczne, zamiast robić await na niesynchronicznych?

1 użytkowników online, w tym zalogowanych: 0, gości: 1