modules/00_Admin/Admin.Core/Infrastructure/Defaults/DefaultVerifyCodeProvider.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using Mkh.Auth.Abstractions.Options;
using Mkh.Cache.Abstractions;
using Mkh.Utils.Annotations;
using Mkh.Utils.Helpers;
using SixLabors.Fonts;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

namespace Mkh.Mod.Admin.Core.Infrastructure.Defaults;

/// <summary>
/// 默认验证码提供器
/// </summary>
[SingletonInject]
internal class DefaultVerifyCodeProvider : IVerifyCodeProvider
{

    //颜色列表,用于验证码、噪线、噪点 
    private readonly Color[] _colors = new[] { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };

    private readonly StringHelper _stringHelper;
    private readonly ICacheProvider _cacheHandler;
    private readonly IOptionsMonitor<AuthOptions> _authOptions;
    private readonly AdminCacheKeys _cacheKeys;

    public DefaultVerifyCodeProvider(StringHelper stringHelper, ICacheProvider cacheHandler, IOptionsMonitor<AuthOptions> authOptions, AdminCacheKeys cacheKeys)
    {
        _stringHelper = stringHelper;
        _cacheHandler = cacheHandler;
        _authOptions = authOptions;
        _cacheKeys = cacheKeys;
    }

    public async Task<VerifyCodeModel> Create()
    {
        var code = _stringHelper.GenerateRandomNumber();

        var bytes = DrawVerifyCode(code);

        var id = Guid.NewGuid().ToString();

        await _cacheHandler.Set(_cacheKeys.VerifyCode(id), code, 5);

        return new VerifyCodeModel
        {
            Id = id,
            Base64 = "data:image/png;base64," + Convert.ToBase64String(bytes)
        };
    }

    public async Task<IResultModel> Verify(string id, string code)
    {
        //启用验证码
后面还有 58 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。