Light.Abp.Captcha

验证码模块


Keywords
abp, captcha, module
License
MIT
Install
Install-Package Light.Abp.Captcha -Version 7.4.0

Documentation

Abp.Captcha

ABP 验证码模块

1. 介绍

Light.Abp.Captcha 库定义了验证码的发送、校验、存储等基本接口,并提供默认实现。(发送接口需集成后自行实现)验证码默认存储为缓存。

2. 如何使用?

2.1 安装

开发人员可以通过 NuGet 搜索 Light.Abp.Captcha 安装组件

2.2 配置

支持在设置中配置验证码过期时间

配置示例:

  "Settings": {
    "AbpCaptchas:EmailCaptcha.ExpireSeconds": 600,//邮箱验证码过期时间
    "AbpCaptchas:SmsCaptcha.ExpireSeconds": 300,//短信验证码过期时间
    "AbpCaptchas:Captcha.FrequencyLimitSeconds": 60//请求频率限制
  },

2.3 实现发送接口

需要在项目中实现验证码发送(短信或邮件)的接口

    public class AliyunSmsCaptchaSender: ISmsCaptchaSender
    {
        public virtual Task<bool> SendAsync(Captcha captcha)
        {
            var templateCode = "";
            var signName = "";
            switch (captcha.Type)
            {
                case "login":
                    templateCode = "SMS_123456";
                    break;
                case "retrievePassword":
                case "changePassword":
                    templateCode = "SMS_1234567";
                    break;
            }
            var code = captcha.Code;
            var smsRequest = new SendSmsRequest()
            {
                PhoneNumbers = captcha.Receiver,
                TemplateCode = templateCode,
                TemplateParam = JsonConvert.SerializeObject(new { code }),
                SignName = signName,
            };

            var response = _smsSender.Send(smsRequest);
            if (response.Code != "OK")
            {
                throw new BusinessException(response.Message);
            }
        }
    }

    public class EmailCaptchaSender: IEmailCaptchaSender
    {
          public virtual Task<bool> SendAsync(Captcha captcha)
          {
            //todo 发送验证码
          }
    }

2.4 调用示例

在AppService中,注入ICaptchaManager即可使用

    public class CaptchaAppService : ApplicationService
    {
        private readonly IdentityUserManager _userManager;
        private readonly ICaptchaManager _captchaManager;

        public CaptchaAppService(IdentityUserManager userManager,
            ICaptchaManager captchaManager)
        {
            _userManager = userManager;
            _captchaManager = captchaManager;
        }

        /// <summary>
        /// 获取验证码
        /// </summary>
        /// <param name="phoneNumber">手机号</param>
        /// <param name="type">类型:(登录:login/修改密码: changePassword/找回密码:retrievePassword)</param>
        [AllowAnonymous]
        public async Task GetAsync(string phoneNumber, string type)
        {
            await _captchaManager.SendAsync(type, phoneNumber);
        }

        public async Task VerifyAsync(string phoneNumber, string type)
        {
           await _captchaManager.VerifyAsync("login", phoneNumber, captcha);
        }
        
    }