Skip to content

Latest commit

 

History

History
81 lines (63 loc) · 1.75 KB

session-email.md

File metadata and controls

81 lines (63 loc) · 1.75 KB

基于 Session 的邮件验证码

  1. 安装需要的 Nuget 包

        Install-Package NCaptcha.AspNetCore.SessionEmail
  2. appsettings.json 文件中添加配置.

    "CaptchaEmail": {
        "UserName": "",
        "Password": "",
        "MailFromName": "",
        "MailFromAddress": "",
        "ServerHost": "",
        "ServerPort": 0,
        "UseSsl": false
    }
  3. 注册依赖注入服务

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSession();
        services.AddSessionBasedEmailCaptcha(Configuration.GetSection("CaptchaEmail").Bind);
    }
  4. 配置 Session

    public void Configure(IApplicationBuilder app)
    {
        app.UseSession();
    }
  5. 添加一个发送验证码的 Api

    public class LoginModel : PageModel
    {
        private readonly ICaptchaGenerator _captchaGenerator;
    
        public LoginModel(ICaptchaGenerator captchaGenerator)
        {
            _captchaGenerator = captchaGenerator;
        }
    
        public async Task OnPostSendCaptchaAsync() => await _captchaGenerator.GenerateCaptchaAsync();
    }
  6. 验证码验证

    public class LoginModel : PageModel
    {
        private readonly ICaptchaValidator _captchaValidator;
    
        public LoginModel(ICaptchaValidator captchaValidator)
        {
            _captchaValidator = captchaValidator;
        }
    
        public async Task<IActionResult> OnPostAsync()
        {
            if (!await _captchaValidator.ValidateAsync(Input.Captcha))
            {
                ModelState.AddModelError(nameof(InputModel.Captcha), "Invalid captcha.");
                return Page();
            }
        }
    }