Crates.io | easy-captcha |
lib.rs | easy-captcha |
version | 0.1.3 |
source | src |
created_at | 2024-02-03 02:25:14.638679 |
updated_at | 2024-02-08 06:06:40.331219 |
description | The Rust implement of the Java captcha library whvcse/EasyCaptcha. |
homepage | https://docs.rs/easy-captcha |
repository | https://github.com/Cinea4678/easy-captcha/ |
max_upload_size | |
id | 1125055 |
size | 630,363 |
Rust图形验证码,由Java同名开源库whvcse/EasyCaptcha移植而来👏,100%纯Rust实现,支持gif、算术等类型。
目前已适配框架:
axum
+ tower-sessions
更多框架欢迎您提交PR,参与适配🙏
普通验证码
动态验证码
算术验证码
在Linux系统上需要安装pkg-config
和fontconfig
,关于fontconfig
的选择请参考fontconfig-rs
中的提示;具体依赖对应如下:
pkg-config fontconfig-dev
pkg-config fontconfig
pkg-config libfontconfig1-dev
pkg-config fontconfig
pkg-config fontconfig-devel
cargo add easy-captcha
若您正在使用的框架已适配,您可直接通过CaptchaUtil
类(并导入相应框架的trait)来使用验证码:
use easy_captcha::extension::axum_tower_sessions::{
CaptchaAxumTowerSessionExt, CaptchaAxumTowerSessionStaticExt,
};
/// 接口:获取验证码
async fn get_captcha(session: Session) -> Result<Response, StatusCode> {
let mut captcha: CaptchaUtil<GifCaptcha> = CaptchaUtil::new();
match captcha.out(&session).await {
Ok(response) => Ok(response),
Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR),
}
}
/// 接口:验证验证码
async fn verify_captcha(
session: Session,
Query(query): Query<HashMap<String, String>>,
) -> Response {
// 从请求中获取验证码
if let Some(code) = query.get("code") {
// 调用CaptchaUtil的静态方法验证验证码是否正确
if CaptchaUtil::ver(code, &session).await {
CaptchaUtil::clear(&session).await; // 如果愿意的话,你可以从Session中清理掉验证码
"Your code is valid, thank you.".into_response()
} else {
"Your code is not valid, I'm sorry.".into_response()
}
} else {
"You didn't provide the code.".into_response()
}
}
您也可以自定义验证码的各项属性:
async fn get_captcha(session: Session) -> Result<Response, StatusCode> {
let mut captcha: CaptchaUtil<GifCaptcha> = CaptchaUtil::with_size_and_len(127, 48, 4);
match captcha.out(&session).await {
Ok(response) => Ok(response),
Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR),
}
}
项目当前提供了三种验证码实现:SpecCaptcha
(静态PNG)、GifCaptcha
(动态GIF)、ArithmeticCaptcha
(算术PNG),您可按需使用。
项目内置字体:
字体 | 效果 |
---|---|
CaptchaFont::Font1 | |
CaptchaFont::Font2 | |
CaptchaFont::Font3 | |
CaptchaFont::Font4 | |
CaptchaFont::Font5 | |
CaptchaFont::Font6 | |
CaptchaFont::Font7 | |
CaptchaFont::Font8 | |
CaptchaFont::Font9 | |
CaptchaFont::Font10 |