ASP. NET Core Identity на странице регистрации, зарегистрируйтесь, затем подождите 5 минут и более - PullRequest
0 голосов
/ 03 августа 2020

ASP. NET Core Identity на странице регистрации, зарегистрируйтесь, затем подождите 5 минут и более

Я использую Microsoft.AspNetCore.Identity.EntityFrameworkCore версию 5.0.0-preview.7, NET Core 5.0- предварительная версия, предварительная версия сообщества Visual Studio 2019, серверная часть Blazor.

enter image description here

enter image description here

I check database, something written to database

введите описание изображения здесь После нажатия кнопки «Отправить» я жду 10 минут на этом экране. (и все еще подождите, на экране консоли do tnet ошибки отсутствуют).

Что не так?

1 Ответ

1 голос
/ 05 августа 2020

ASP. NET Core Identity на странице регистрации, зарегистрируйтесь, затем подождите 5 минут и более

Если вы реализуете и используете настраиваемую службу EmailSender для отправить уведомление по электронной почте зарегистрированному пользователю, что вызовет указанную выше проблему, если службе EmailSender потребуется много времени для отправки электронной почты.

Чтобы устранить проблему и определить, что-то не так с процессом отправки почты, вы можете попытаться написать собственный журнал для отслеживания времени выполнения фрагмента кода ключа, как показано ниже.

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    //custom log 1
    _logger.LogInformation($"Reached Into Register Method - {DateTime.UtcNow.ToString()}");

    returnUrl = returnUrl ?? Url.Content("~/");
    ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
    if (ModelState.IsValid)
    {
        var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
        var result = await _userManager.CreateAsync(user, Input.Password);
                

        if (result.Succeeded)
        {
            _logger.LogInformation("User created a new account with password.");

            //custom log 2
            _logger.LogInformation($"Created New User - {DateTime.UtcNow.ToString()}");

            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
            var callbackUrl = Url.Page(
                "/Account/ConfirmEmail",
                pageHandler: null,
                values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                protocol: Request.Scheme);

            //custom log 3
            _logger.LogInformation($"Generated Email Token - {DateTime.UtcNow.ToString()}");

            await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

            //custom log 4
            _logger.LogInformation($"Sent Email - {DateTime.UtcNow.ToString()}");

            if (_userManager.Options.SignIn.RequireConfirmedAccount)
            { 
               //...

В моем тесте, если моя настраиваемая служба EmailSender занимает около 2 минут для отправки уведомления о регистрации, пользователю браузера придется долго ждать этого операции.

Журналы регистрации пользователей

enter image description here

In browser Network tab, it take about 2 minutes

введите описание изображения здесь

...