【发布时间】:2022-01-11 18:46:46
【问题描述】:
我正在尝试实施一项功能来更改用户的电子邮件。默认情况下,Asp 网络核心身份允许用户更改电子邮件,但它需要确认链接。我想知道是否可以不使用确认链接而只编辑功能以使用新电子邮件更新用户的电子邮件。提前致谢
我试过了
await _userManager.ChangeEmailAsync(user, Input.NewEmail, code);
和
var changingser = _userManager.Users.First(u => u.Email.Equals(email));
changingser.Email = Input.NewEmail;
这似乎不起作用
Email.cshtml:更改电子邮件功能
public async Task<IActionResult> OnPostChangeEmailAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
if (!ModelState.IsValid)
{
await LoadAsync(user);
return Page();
}
var email = await _userManager.GetEmailAsync(user);
if (Input.NewEmail != email)
{
var userId = await _userManager.GetUserIdAsync(user);
var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
await _userManager.ChangeEmailAsync(user, Input.NewEmail, code);
/* var callbackUrl = Url.Page(
"/Account/ConfirmEmailChange",
pageHandler: null,
values: new { userId = userId, email = Input.NewEmail, code = code },
protocol: Request.Scheme);*/
//await _emailSender.SendEmailAsync(
// Input.NewEmail,
// "Confirm your email",
// $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
StatusMessage = "Email has been changed";
return RedirectToPage();
}
StatusMessage = "Your email is unchanged.";
return RedirectToPage();
}
编辑:无效令牌失败?
【问题讨论】:
-
后者由于密码散列而无法工作。您必须使用 usermanager 类
-
感谢您的回复。我正在尝试使用 userManager 类并执行 .ChangeEmailAsycn 但它似乎没有保存更改
-
看看你的回报是多少。从 await _userManager.ChangeEmailAsync 调用中获取 IdentityResult(即:var result = _userManager.ChangeEmailAsync())
-
@GHDevOps 由于某种原因,我似乎得到了一个无效的令牌。我已经更新了帖子以显示这一点。不知道为什么它无效
-
错误说明了什么?
标签: c# asp.net-core asp.net-identity identityserver4 blazor-webassembly