2017-07-06 94 views
2

一个电话号码,我无法弄清楚如何做一个电话号码,确认在asp.net 1.1核心如何确认在ASP.Net核心1.1MVC

标识服务配置包含明确的选项,要求确认的电子邮件和/或电话号码。

这是可以做到的方式如下:

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); 

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

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

用户管理器包含但是一些方法做了用户手机的变化:

_userManager.GenerateChangePhoneNumberTokenAsync(); 

_userManager.VerifyChangePhoneNumberTokenAsync(); 

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

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

+0

电话确认需要像twilio这样的外部服务才能通过发送短信进行确认。我已经在我的项目中实现了这些东西https://github.com/joeaudette/cloudscribe –

+0

@JoeAudette嗯,我不知道如何提供确认码,但是如何正确验证它。你能指点我吗,你在哪里? –

+1

如果您看到[源代码](https://github.com/aspnet/Identity/blob/rel/1.1.1/src/Microsoft.AspNetCore.Identity/UserManager.cs#L1518),唯一设置PhoneNumberConfirmed的地方为真是在ChangePhoneNumberAsync(TUser用户,字符串phoneNumber,字符串标记)' – tmg

回答

4

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

根据它,正确的方法确实使用GenerateChangePhoneNumberTokenAsync以生成令牌和ChangePhoneNumberAsync到(如果验证成功,进而设置PhoneNumberConfirmed为true)验证它:

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

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

备注 :在ASP.NET核心2.0.0,不幸的是,有一个bug(回归)和GenerateChangePhoneNumberTokenAsync不会再产生短信友好的象征,是目前无用:

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

+1

OMG这个bug。一直在与我搞砸。 – Terrance00

+0

有关解决方法,请参阅https://stackoverflow.com/a/46078505/3146354 – jcemoller