【发布时间】:2017-03-08 19:38:28
【问题描述】:
我已经使用 ASP.NET Identity 2.2.1 成功构建了简单的注册系统。
我只需要 API,所以我构建了简单的控制器,允许使用路由 account/create 创建帐户,当创建帐户时,用户会收到带有确认其手机所需令牌的 SMS 消息,同时我正在生成所需的链接验证电子邮件地址,我将其发送到用户电子邮件地址。
然后用户需要从 SMS 中输入令牌(向account/confirm_phone 请求)并单击他收到的电子邮件中的链接。
这两个操作是激活帐户所需要的,这部分工作正常。
我需要将电子邮件链接更改为电子邮件令牌,类似于用于确认电话号码的电子邮件,因此用户必须输入该令牌而不是单击链接(请求account/confirm_email)
方法 GenerateEmailConfirmationTokenAsync 返回非常长的代码,该代码将成为电子邮件中链接的一部分,我希望它返回 6 位令牌。
我不能重复使用GeneratePhoneConfirmationTokenAsync,因为这将生成与通过 SMS 发送相同的令牌。
我在互联网上进行了搜索,但找不到任何有关如何自定义 GenerateEmailConfirmationTokenAsync 方法生成的令牌的信息。
是否可以配置该令牌生成器,使其返回 6 个(或任何可配置长度)数字代码,我可以使用它来确认用户电子邮件地址。
我知道将链接发送给用户是更好的选择,但正如我写的那样,这是我得到的要求,我无法更改。
【问题讨论】:
-
所以您同时向电子邮件和手机发送确认信息?
-
@trailmax 是的,但这些应该是不同的代码。一个用于确认电话号码,第二个用于确认电子邮件地址。
-
我明白了。在其中一个系统中,我做过类似的事情。但是我已经存储了一个带有到期时间的确认码。然后将用户提供的与存储的进行比较。您也可以这样做 - 使用到期时间戳存储两个代码并自己生成代码(而不是使用身份)。
-
@trailmax 感谢您的提示。我在考虑类似的事情,但我查看了 Identity 的源代码,发现代码负责生成电话号码令牌。我正在考虑使用类似的东西,但使用电子邮件作为修饰符而不是电话号码。我想避免数据库中的这两个字段并从盐和电子邮件地址生成该令牌,但我不知道如何设置该 nee 令牌的生命周期。
-
那么你就走上了正轨。我记得我在令牌生成代码的某处看到了生命周期属性。继续挖掘。如果你还需要的话,我今晚可以看看它
标签: c# asp.net asp.net-web-api asp.net-identity-2