【发布时间】:2019-10-01 19:36:29
【问题描述】:
如果用户想更改为新的电子邮件地址,我使用:
var token = await _userManager.GenerateChangeEmailTokenAsync(user, newEmail);
...并发送包含此更改令牌的确认邮件。用户单击电子邮件中的链接,返回站点,现在我需要更改电子邮件。
但是,我不知道新的电子邮件地址。
我经历了确认邮件循环的麻烦,所以我想使用它。再次询问电子邮件可能会导致输入错误,从而可能将用户锁定在其帐户之外,这也是用户面临的另一个障碍,我需要维护更多代码。
明显的解决方案:
- 再次请求(并冒着输入错误的风险,并使邮件循环毫无意义)
- 将新的电子邮件地址存储在
User.NewEmailTemp中(哎呀,想保持这个无状态) - 将其包含在电子邮件的链接中(安全性差!)
可能有更好的方法。更改令牌包含一堆数据,其中包括一个包含新电子邮件地址的 “目的”。我可以以某种方式提取/解码目的,还是将其作为散列过程的一部分进行破坏?
【问题讨论】:
-
一些可能与我的系统无关的背景:1) 用户名是电子邮件地址,2) 使用 JWT 而不是 cookie,3) SPA(角度)。
标签: asp.net-core asp.net-identity asp.net-core-2.2