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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM