我正在尝试为用户实现一种在AspNetCore中更改其电子邮件的方式,因此在“帐户管理”屏幕上我有更改功能,该功能将在用户管理器上调用GenerateChangeEmailTokenAsync,然后发送包含令牌和UserId的链接的电子邮件。
我的问题是如何允许链接将电子邮件地址更改为新地址,因为ChangeEmailAsync需要输入新的电子邮件地址。
实现此功能的最佳实践方法是什么?我不想通过电子邮件链接发送新的电子邮件地址,但也不想让他们再次输入电子邮件。希望有人这样做,我只能在任何地方找到它,而且应该非常简单。
答案 0 :(得分:5)
我知道现在回答这个问题的时间已经很晚了,但我之前一直在寻找它,并且认为我将答案留给其他人。
GenerateChangeEmailTokenAsync方法将新电子邮件作为令牌哈希的一部分。 接下来,您将创建一个包含令牌,新电子邮件和旧电子邮件
的链接 var token = await _userManager.GenerateChangeEmailTokenAsync(user, model.NewEmail);
var resetLink = Url.Action("ChangeEmailToken", "account", new {token = token, oldEmail = user.Email, newEmail = model.newEmail }, protocol: HttpContext.Request.Scheme);
接下来,您通过电子邮件将此链接发送给用户。
单击时,用户点击链接中指定的方法(此处为AccountController上的“ChangeEmailToken”:
[AllowAnonymous]
[HttpGet]
public async Task<IActionResult> ChangeEmailToken([FromQuery] string token, [FromQuery] string oldEmail, [FromQuery] string newEmail)
接下来,您需要验证令牌,并且 - 如果成功 - 更新电子邮件地址。
var result = await _userManager.ChangeEmailAsync(user, newEmail, token);
答案 1 :(得分:1)
正常流程是让用户像往常一样更新个人资料。
如果用户更新了他们的电子邮件地址,则需要验证该新电子邮件地址。
当您使用GenerateChangeEmailTokenAsync
生成令牌时。
您将该令牌作为指向新电子邮件地址的链接发送。
当用户点击新电子邮件中的链接时,它会将其带回您的网站,该网站会自动确认该令牌并验证新的电子邮件地址。