【问题标题】:How to confirm a phone number in ASP.Net Core 1.1MVC如何在 ASP.Net Core 1.1MVC 中确认电话号码
【发布时间】:2017-12-10 22:16:50
【问题描述】:

我不知道如何在 asp.net core 1.1 中进行电话号码确认

身份服务配置包含需要确认的电子邮件和/或电话号码的明确选项。

可以通过以下方式完成:

services
    .AddIdentity<User, Role>(options =>
    {
        options.SignIn.RequireConfirmedEmail = true;
        options.SignIn.RequireConfirmedPhoneNumber = true;
     });

电子邮件的验证非常简单,因为 UserManager 包含显式令牌生成器及其验证器:

var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

可以通过以下方式验证生成的令牌:

var result = await _userManager.ConfirmEmailAsync(user, code);

如果令牌有效,上述行会将 user.EmailConfirmed 标志切换为 true。

现在的问题是,我没有看到类似的方法来生成电话验证令牌及其等效的验证方法(如果成功,则反过来应该将 user.PhoneNumberConfirmed 标志切换为 true)。

用户管理器包含很少的方法来更改用户电话:

_userManager.GenerateChangePhoneNumberTokenAsync();

_userManager.VerifyChangePhoneNumberTokenAsync();

但似乎这些方法不会切换 user.PhoneNumberConfirmed 标志。

我错过了什么吗?确认用户电话号码的正确方法是什么(换句话说,将 user.PhoneNumberConfirmed 设置为 true)?

【问题讨论】:

  • 电话确认需要像 twilio 这样的外部服务通过发送短信来进行确认。我已经在我的项目中实现了这些东西github.com/joeaudette/cloudscribe
  • @JoeAudette 好吧,我对如何提供确认码不感兴趣,而是对如何正确验证它感兴趣。你能告诉我你在哪里做的吗?
  • 如果您看到source code,唯一将PhoneNumberConfirmed 设置为true 的地方是ChangePhoneNumberAsync(TUser user, string phoneNumber, string token)
  • @tmg 嗯,我明白了。它感觉不是对称的,因为它用于电子邮件确认,我不必再次设置电子邮件(并且还有一个类似的方法 ChangeEmailAsync)。我本来期望像 ConfirmPḧoneNumberAsync(TUser user, string token) 这样的东西。
  • 您可以在我的managecontroller中看到可能为您提供启发的代码示例

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


【解决方案1】:

感谢@tmg 将我指向源代码。

据此,正确的方法确实是使用GenerateChangePhoneNumberTokenAsync 生成令牌并使用ChangePhoneNumberAsync 对其进行验证(如果验证成功,则将PhoneNumberConfirmed 设置为true):

var token = await _userManager
    .GenerateChangePhoneNumberTokenAsync(user, user.PhoneNumber);

var result = await _userManager
    .ChangePhoneNumberAsync(user, user.PhoneNumber, token);

备注:不幸的是,在 ASP.NET Core 2.0.0 中存在一个错误(回归),GenerateChangePhoneNumberTokenAsync 不再生成 SMS 友好令牌,目前无用:

GenerateChangePhoneNumberTokenAsync is not generating an SMS-friendly token in ASP.NET Core 2.0

【讨论】:

  • 天啊这个错误。一直在惹我。
  • 这浪费了我 2 个小时 :(
  • 似乎已在 .net core 3.0 中修复
  • 这需要我 InvalidToken ChangePhoneNumberAsync 错误
猜你喜欢
  • 2015-04-12
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 2023-04-07
  • 2017-11-12
  • 2018-06-30
  • 1970-01-01
  • 2020-08-16
相关资源
最近更新 更多