diff --git a/captcha/README.md b/captcha/README.md index 43376d7..0b388f4 100644 --- a/captcha/README.md +++ b/captcha/README.md @@ -6,7 +6,7 @@ ## 功能特性 -- **图片验证码生成**:5 位字符(字母 + 数字),自动排除易混淆字符(`l I 1 O 0 o`) +- **图片验证码生成**:4 位字符(字母 + 数字),自动排除易混淆字符(`l I 1 O 0 o`) - **Token 机制**:每次生成图片返回唯一 Token(32 位十六进制),校验时**一次性消费**,防止重放 - **过期自动清理**:Token 默认 300 秒(5 分钟)失效;`image` 路由请求时顺带清理过期项 - **线程安全**:使用锁(`STORE_LOCK`)保护内存存储,支持并发请求 diff --git a/captcha/captcha_service.py b/captcha/captcha_service.py index 009cb8a..054749b 100644 --- a/captcha/captcha_service.py +++ b/captcha/captcha_service.py @@ -38,7 +38,7 @@ from pymsg import MsgServer # noqa: E402 # ── 配置 ──────────────────────────────────────────────────────────────── -CAPTCHA_LEN = 5 +CAPTCHA_LEN = 4 CAPTCHA_TTL = 300 # Token 有效期(秒) CHARS = string.ascii_letters + string.digits @@ -63,7 +63,7 @@ def generate_image(text): for i, ch in enumerate(text): color = random.choice([(30, 30, 30), (50, 80, 150), (150, 50, 50), (50, 130, 50)]) y = random.randint(2, 12) - x = 10 + i * 28 + random.randint(-3, 3) + x = 15 + i * 32 + random.randint(-3, 3) # 4 位字符在 160px 宽度内均匀分布 try: font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", random.choice([28, 30, 32, 34])) diff --git a/static/public/login.html b/static/public/login.html index e0438a4..41af9e4 100644 --- a/static/public/login.html +++ b/static/public/login.html @@ -18,8 +18,8 @@ - - 加载中… + 加载中… +