在系统的注册、登录等场景,都有很多类似的案例。也有类似于滑动验证、选字顺序验证等效果。今天带来的是文件流形式的,相当于动态图片吧
1、安装nuget包:Lazy.Captcha.Core
2、 在入口文件中注入:
#region 图形验证码
builder.Services.AddCaptcha(option =>
{
option.CaptchaType = CaptchaType.WORD_NUMBER_LOWER; //验证码类型
option.CodeLength = 6; //验证码长度, 要放在CaptchaType设置后. 当类型为算术表达式时,长度代表操作的个数
option.ExpirySeconds = 120; //验证码过期时间
option.IgnoreCase = true; //比较时是否忽略大小写
option.StoreageKeyPrefix = ""; //存储键前缀
option.ImageOption.Animation = true; //是否启用动画
option.ImageOption.FrameDelay = 300; //每帧延迟,Animation=true时有效, 默认30
option.ImageOption.Width = 132; //验证码宽度
option.ImageOption.Height = 40; //验证码高度
option.ImageOption.BubbleCount = 3; //气泡数量
option.ImageOption.BubbleMinRadius = 5; //最小半径
option.ImageOption.BubbleMaxRadius = 15; //最大半径
option.ImageOption.BubbleThickness = 1; //边沿厚度
option.ImageOption.InterferenceLineCount = 3; //干扰线数量
option.ImageOption.FontFamily = DefaultFontFamilys.Instance.Actionj; //字体
option.ImageOption.FontSize = 36; //字体大小
option.ImageOption.TextBold = true;//粗体
});
#endregion
3、获取:
控制器构造函数注入 private readonly ICaptcha _captcha;
/// <summary>
/// 获取验证码
/// </summary>
/// <param name="id">验证码唯一id</param>
/// <returns></returns>
[HttpGet]
public IActionResult Captcha([FromQuery] string id)
{
var data = _captcha.Generate(id);
var stream = new MemoryStream(data.Bytes);
return new FileStreamResult(stream, "image/gif");
}
4、测试:
在前端中,就可以直接用这个url作为img的src
<el-button class="login-content-code" v-waves @click="onCaptchaChange">
<img :src="captchaUrl" alt="看不清?点击换一张!" />
</el-button>
5、验证:
bool validate = _captcha.Validate(Id, Code);
if (!validate)
{
//验证码错误
}
6、其他类型的验证这里暂时不做分享,后续有空再做补充分享。