Подтверждение по электронной почте: UserManager.ConfirmEmailAsync Ошибка: имя не может быть пустым или пустым

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

Код для отправки электронного подтверждения находится в Register действие:

userService.InsertUser(user);

var appuser = new ApplicationUser(user); //{ UserName = model.Email, Email = model.Email };
appuser.UserName = model.Email;
//var result = await UserManager.CreateAsync(appuser, model.Password);
//if (result.Succeeded)
//{
//    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

//    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
//    // Send an email with this link
string code = await UserManager.GenerateEmailConfirmationTokenAsync(appuser.Id);
//string htmlcode = HttpUtility.UrlEncode(code);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = appuser.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(appuser.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

return RedirectToAction("RegisterComplete");

Из кода я получил callbackurl который как http://localhost:63599/Account/ConfirmEmail?userId=22&code=C3mfUtYqGzVCsrCnE5VDzC0wfsbgP6lMSVgqFk25kym3uGh0%2B%2Bltqyh0VRim1ulbwSRHBzAgUCJ1WceipbRcErddmNJqzkksZN50QO%2FqTRprpgKcW19wX33QtftwCh7zUz%2B01aghCdg8jZ8Ff%2FNVfRvbjyIW0wavN0Ueq3xl6jBmrv%2BrnbtuKLJO%2BuFE2zHF

Когда я наберу код в браузере, он запустит ConfirmEmail действие от AccountController:

[AllowAnonymous]
    public async Task<ActionResult> ConfirmEmail(string userId, string code)
    {
        if (userId == null || code == null)
        {
            return View("Error");
        }
        var result = await UserManager.ConfirmEmailAsync(userId, code);
        //if (result.Succeeded)
        //{
        //    UserService userService = new UserService();
        //    long uid = long.Parse(userId);
        //    User user = userService.GetBy(u => u.UserID == uid).FirstOrDefault();
        //    user.IsVerified = true;
        //    userService.Update(user);
        //}
        return View(result.Succeeded ? "ConfirmEmail" : "Error");
    }

Но result.Succeeded является false, А также result.Error[0] : Name cannot be null or empty, Я не могу найти больше информации об этой ошибке в этом контексте, и поэтому я застрял.

Если я изменю код подтверждения, я получу result.Error[0]: Invalid tokenЭто заставило меня думать, что по крайней мере мой токен был верным. Но я не понимаю, на что жалуется эта ошибка.

Любая помощь / указатели будут оценены.

1 ответ

Учитывая ваш код

appuser.UserName = model.Email;

я думаю appuser.UserName должен быть уже установлен для существующих пользователей, вместо того, чтобы устанавливать его вручную из модели.

Имя не может быть пустым или пустым в одном направлении: UserName в вашем постоянном хранилище может быть ноль или пусто.

Другие вопросы по тегам