Подтверждение по электронной почте: 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
в вашем постоянном хранилище может быть ноль или пусто.