AspNet Core生成并更改电子邮件地址

时间:2016-04-01 23:04:47

标签: asp.net-mvc asp.net-core asp.net-core-mvc

我正在尝试为用户实现一种在AspNetCore中更改其电子邮件的方式,因此在“帐户管理”屏幕上我有更改功能,该功能将在用户管理器上调用GenerateChangeEmailTokenAsync,然后发送包含令牌和UserId的链接的电子邮件。

我的问题是如何允许链接将电子邮件地址更改为新地址,因为ChangeEmailAsync需要输入新的电子邮件地址。

实现此功能的最佳实践方法是什么?我不想通过电子邮件链接发送新的电子邮件地址,但也不想让他们再次输入电子邮件。希望有人这样做,我只能在任何地方找到它,而且应该非常简单。

2 个答案:

答案 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生成令牌时。

您将该令牌作为指向新电子邮件地址的链接发送。

当用户点击新电子邮件中的链接时,它会将其带回您的网站,该网站会自动确认该令牌并验证新的电子邮件地址。