以下內容均來自Gitee的開源倉庫,具體的使用請移步Gitee:https://gitee.com/pojianbing/lazy-captcha 以下是我自己使用的具體方式 首先安裝NuGet包: Microsoft.Extensions.Caching.StackExchangeRedis La ...
以下內容均來自Gitee的開源倉庫,具體的使用請移步Gitee:https://gitee.com/pojianbing/lazy-captcha
以下是我自己使用的具體方式
首先安裝NuGet包:
Microsoft.Extensions.Caching.StackExchangeRedis
Lazy.Captcha.Core
Lazy.Captcha.Core可以選擇以下方式進行安裝
Package Manager
Install-Package Lazy.Captcha.Core
.NET CLI
dotnet add package Lazy.Captcha.Core
在Startup.cs文件的ConfigureServices方法中配置什麼什麼方式存儲,我這裡使用使用redis分散式緩存,預設使用的是 記憶體存儲(AddDistributedMemoryCache)
//預設使用記憶體存儲(AddDistributedMemoryCache)
//services.AddCaptcha(Configuration);
//如果使用redis分散式緩存
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration.GetConnectionString("RedisCache");
options.InstanceName = "captcha:";
});
然後繼續在上面所提到的方法中加入以下代碼:
// 全部配置
services.AddCaptcha(Configuration, option =>
{
option.CaptchaType = CaptchaType.WORD; // 驗證碼類型
option.CodeLength = 4; // 驗證碼長度, 要放在CaptchaType設置後. 當類型為算術表達式時,長度代表操作的個數
option.ExpirySeconds = 120; // 驗證碼過期時間
option.IgnoreCase = true; // 比較時是否忽略大小寫
option.StoreageKeyPrefix = ""; // 存儲鍵首碼
option.ImageOption.Animation = true; // 是否啟用動畫
option.ImageOption.FrameDelay = 60; // 每幀延遲,Animation=true時有效, 預設30
option.ImageOption.Width = 150; // 驗證碼寬度
option.ImageOption.Height = 50; // 驗證碼高度
option.ImageOption.BackgroundColor = SKColors.White; // 驗證碼背景色
option.ImageOption.BubbleCount = 2; // 氣泡數量
option.ImageOption.BubbleMinRadius = 5; // 氣泡最小半徑
option.ImageOption.BubbleMaxRadius = 15; // 氣泡最大半徑
option.ImageOption.BubbleThickness = 1; // 氣泡邊沿厚度
option.ImageOption.InterferenceLineCount = 2; // 干擾線數量
option.ImageOption.FontSize = 36; // 字體大小
option.ImageOption.FontFamily = DefaultFontFamilys.Instance.Actionj; // 字體
/*
* 中文使用kaiti,其他字元可根據喜好設置(可能部分轉字元會出現繪製不出的情況)。
* 當驗證碼類型為“ARITHMETIC”時,不要使用“Ransom”字體。(運算符和等號繪製不出來)
*/
option.ImageOption.TextBold = true;// 粗體,該配置2.0.3新增
});
如果要修改配置參數去參考上面提到的原文鏈接。
接下來在appsettings.json文件中配置Redis的配置如果沒修改過Redis的預設配置直接複製粘貼上去即可,如果自己修改過就按照自己修改的配置。
"ConnectionStrings": {
"G6StringDB": "server=.;uid=sa;pwd=123456;database=2010ARbacDB;",
"RedisCache": "localhost,password=123456"
},
再加入以下這段代碼,這段代碼也還是圖片驗證碼的參數配置,如果要修改配置參數去參考上面提到的原文鏈接。
"CaptchaOptions": {
"CaptchaType": 5, // 驗證碼類型
"CodeLength": 4, // 驗證碼長度, 要放在CaptchaType設置後 當類型為算術表達式時,長度代表操作的個數
"ExpirySeconds": 60, // 驗證碼過期秒數
"IgnoreCase": true, // 比較時是否忽略大小寫
"StoreageKeyPrefix": "", // 存儲鍵首碼
"ImageOption": {
"Animation": false, // 是否啟用動畫
"FontSize": 32, // 字體大小
"Width": 100, // 驗證碼寬度
"Height": 40, // 驗證碼高度
"BubbleMinRadius": 5, // 氣泡最小半徑
"BubbleMaxRadius": 10, // 氣泡最大半徑
"BubbleCount": 3, // 氣泡數量
"BubbleThickness": 1.0, // 氣泡邊沿厚度
"InterferenceLineCount": 4, // 干擾線數量
"FontFamily": "kaiti", // 包含actionj,epilog,fresnel,headache,lexo,prefix,progbot,ransom,robot,scandal,kaiti
"FrameDelay": 15, // 每幀延遲,Animation=true時有效, 預設30
"BackgroundColor": "#ffff00", // 格式: rgb, rgba, rrggbb, or rrggbbaa format to match web syntax, 預設#fff
"ForegroundColors": "", // 顏色格式同BackgroundColor,多個顏色逗號分割,隨機選取。不填,空值,則使用預設顏色集
"Quality": 100, // 圖片質量(質量越高圖片越大,gif調整無效可能會更大)
"TextBold": false // 粗體,該配置2.0.3新增
}
}
接下來就是在你登錄的邏輯中加入驗證碼對比功能
首先使用構造函數的註入方式將ICaptcha分散式緩存進行依賴註入
private readonly ICaptcha _captcha;
/// <summary>
///
/// </summary>
/// <param name="captcha"></param>
public CaptchaController(ICaptcha captcha)
{
_captcha = captcha;
}
然後通過
/// <summary>
/// 獲取驗證碼
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("ICaptcha")]
public IActionResult Captcha(string id)
{
var info = _captcha.Generate(id);
// 有多處驗證碼且過期時間不一樣,可傳第二個參數覆蓋預設配置。
//var info = _captcha.Generate(id,120);
var stream = new MemoryStream(info.Bytes);
return File(stream, "image/gif");
}
獲取到圖片驗證碼文件流返回給前端進行顯示。
最後用下麵的代碼將驗證後的結果返回判斷驗證碼是否對比成功。
/// <summary>
/// 多次校驗(https://gitee.com/pojianbing/lazy-captcha/issues/I4XHGM)
/// 演示時使用HttpGet傳參方便,這裡僅做返回處理
/// </summary>
[HttpGet("IValidate2")]
public IActionResult Validate2(string id, string code)
{
var rul= _captcha.Validate(id, code, false);
return Ok(new
{
rul
});
}
圖片驗證碼中的驗證內容是存儲在Redis中的。
這樣就可以去使用了,僅供參考,如遇到問題去看原文鏈接。