• 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才会有这功能,不得不吐槽一下,太坑了。。。

  • 相关阅读:
    [转载]Linux下mail使用技巧
    VTK Online教程大全
    拓扑结构与TopoDS
    三维视图变换与相机模型
    说说DoDataExchange(CDataExchange* pDX)
    Lua Lib在VC下的编译
    建立最简单的OpenCASCADE程序
    构建通用类型 继承 VS 聚合
    【软件】新瓶装老酒 MyCapture
    用std::find查找文件流中的内容
  • 原文地址:https://www.cnblogs.com/94pm/p/6801347.html
Copyright © 2020-2023  润新知