如何在ASP.Net Core 1.1MVC中确认电话号码 [英] How to confirm a phone number in ASP.Net Core 1.1MVC

查看:200
本文介绍了如何在ASP.Net Core 1.1MVC中确认电话号码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道如何在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);

以上行将切换用户.如果令牌有效,则将EmailConfirmed标志更改为true.

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

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

_userManager.GenerateChangePhoneNumberTokenAsync();

_userManager.VerifyChangePhoneNumberTokenAsync();

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

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

解决方案

感谢@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友好令牌,并且目前是无用的:

GenerateChangePhoneNumberNumberAsync在ASP.NET Core 2.0中未生成SMS友好令牌

I cannot figure out how to do a phone number confirmation in asp.net core 1.1

Identity service configuration contains explicit options to require confirmed email and/or phone number.

It can be done the following way:

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

The validation of the email is quite straight forward as the UserManager contains explicit token generator and its validator:

var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

The generated token can be validated the following way:

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

The above line will switch the user.EmailConfirmed flag to true if the token is valid.

Now the problem is that I don't see a similar method to generate a phone validation token and its equivalent method to validate it (which in turn should switch the user.PhoneNumberConfirmed flag to true if successful).

User manager contains however few methods to do a user phone change:

_userManager.GenerateChangePhoneNumberTokenAsync();

and

_userManager.VerifyChangePhoneNumberTokenAsync();

But it seems these methods don't switch the user.PhoneNumberConfirmed flag.

Am I missing something? What would be the correct way to confirm the user phone number (in other words to set user.PhoneNumberConfirmed to true) ?

解决方案

Thanks to @tmg for pointing me to the source code.

According to it, the right way is indeed to use GenerateChangePhoneNumberTokenAsync in order to generate a token and ChangePhoneNumberAsync to validate it (which in turn sets PhoneNumberConfirmed to true if validation succeeds):

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

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

Remark: in ASP.NET Core 2.0.0, unfortunately, there is a bug (regression) and GenerateChangePhoneNumberTokenAsync does not generate an SMS-friendly token anymore and is currently useless:

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

这篇关于如何在ASP.Net Core 1.1MVC中确认电话号码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆