ConfirmEmailModel.OnGetAsyn c, кажется, вызывается несколько раз - PullRequest
0 голосов
/ 15 января 2020

У меня есть базовое c веб-приложение в ядре 3, добавлено удостоверение asp, которое поставляется с ConfirmEmailModel.

Итак, я хотел добавить пользователя в другую таблицу, как только они подтвердите их адрес электронной почты, но я получаю, не могу вставить дубликат ключа.

Пользователь уже вставлен, означает ли это, что код дважды вызывается, когда пользователь щелкает ссылку в своем электронном письме?

    public async Task<IActionResult> OnGetAsync(string userId, string code)
    {
        if (userId == null || code == null)
        {
            return RedirectToPage("/Index");
        }

        WebApplication4User user = await _userManager.FindByIdAsync(userId);
        if (user == null)
        {
            return NotFound($"Unable to load user with ID '{userId}'.");
        }

        code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
        IdentityResult result = await _userManager.ConfirmEmailAsync(user, code);
        string StatusMessage = "Error confirming your email.";

        if (result.Succeeded)
        {
            StatusMessage = "Thank you for confirming your email.";
            _context.UserDetailses.Add(new UserDetails() { Id = Guid.Parse(userId) });
            _context.SaveChanges();
        }

        return Page();
    }

исключение:

Произошла ошибка при обновлении записей. Смотрите внутреннее исключение для деталей. Нарушение ограничения PRIMARY KEY 'PK_UserDetailses'. Невозможно вставить повторяющийся ключ в объект 'dbo.UserDetailses'.

...