AbpZero双重认证之短信的坑
Posted 我是格鲁特
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AbpZero双重认证之短信的坑相关的知识,希望对你有一定的参考价值。
一、什么是双重认证
所谓双重认证简单来说就是除了用户名密码方式外,还额外增加了一道登录屏障。登录时先输入用户名和密码,正确后会向邮箱或手机号发送一个验证码(取决于您采用何种方式,甚至可以采用银行的电子KEY啥的),输入的验证码如果正确的话,才可以登录系统。
二、AbpZero中使用双重认证特别需要注意的地方
1.发送的内容中没有验证码!
AbpZero项目中AbpUserManager类的RegisterTwoFactorProviders方法主要用于指定可用的验证信息发送提供程序,该方法中定义了发送信息的内容,信息内容从语言包中读取,可是在语言包中并没有该项!
所以需要在语言包文件中Localization/XX/XX-zh-CN.xml中添加相应的语言项,需要注意的是语言项中的内容一定要添加占位符!不然发送的内容中是没有验证码的
2.如何使用短信发送验证码?
1.后台需要开启双重认证,使用手机号验证这个就不说了
2.需要在项目中定义一个类来实现IIdentityMessageService接口,重写SendAsync方法来实现信息发送
/// <summary> /// 发送信息验证码 /// </summary> public class IdentitySmsMessageService : IIdentityMessageService, ITransientDependency { public ILogger Logger { get; set; } private readonly ISmsSender _iSMSSender; public IdentitySmsMessageService(ISmsSender iSMSSender) { Logger = NullLogger.Instance; _iSMSSender = iSMSSender; } public async Task SendAsync(IdentityMessage message) { /* //TODO: Implement this service to send SMS to users. This is used by UserManager (ASP.NET Identity) on two factor auth. Logger.Warn("Sending SMS is not implemented! Message content:"); Logger.Warn("Destination : " + message.Destination); Logger.Warn("Subject : " + message.Subject); Logger.Warn("Body : " + message.Body); */ var msg = new SmsMessage(); msg.Mobile = message.Destination; msg.Content = message.Body; await _iSMSSender.SendAsync(msg); } }
3.账号必须要有手机号(PhoneNumber)且手机号是验证过的(IsPhoneNumberConfirmed),如果当前登录账号不满足这两个条件,则只能选择邮箱方式(因为邮箱在注册时是必须填写的),这个坑太深真的太深了。
三、验证码和激活邮件有效期疑问
abpzero用户管理这块是基于identity framework实现的,查了很多资料,都没有看到验证码和激活邮件的过期时间,据说identity framework才会有这功能,不得不吐槽一下,太坑了。。。
以上是关于AbpZero双重认证之短信的坑的主要内容,如果未能解决你的问题,请参考以下文章
8ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能
AbpZero之企业微信---登录(拓展第三方auth授权登录)---第三步:需要注意事项