news 2026/5/1 4:02:57

VonaJS业务抽象层: 验证码体系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VonaJS业务抽象层: 验证码体系

验证码体系

VonaJS的内置模块a-captcha提供了通用的验证码体系,使用Captcha Provider支持各种验证码方式,并且使用Captcha Scene支持不同场景的验证码使用策略

特性

Captcha Provider:使用Captcha Provider支持各种验证码方式,如:文字图形验证码、短信验证码,等等

Captcha Scene:使用Captcha Scene支持不同场景的验证码使用策略。比如,在某个场景下,可以在多个 Captcha Provider 中进行轮替,或者根据用户状态使用不同难度的 Captcha Provider,等等

立即验证:前端可以对用户输入的验证码进行立即验证。立即验证之后在提交表单时仍然要进行二次验证

表单验证:前端可以将用户输入的验证码与表单数据一起发往后端验证

bean.captcha

模块a-captcha提供了全局 Bean bean.captcha,可以通过统一的方式使用所有 Provider/Scene 提供的验证码能力

模块a-captchasimple提供了一个 Provider a-captchasimple:imageText,基于svg-captcha实现文字图片的验证码能力

模块a-captchasimple提供了一个 Scene a-captchasimple:simple。该 Scene 只使用一个 Provider,即a-captchasimple:imageText

下面演示如何使用模块a-captchasimple提供的验证码能力

1. create

// create captcha

const captcha = await this.bean.captcha.create('a-captchasimple:simple');

返回值类型:ICaptchaData

export interface ICaptchaData {

id: string;

provider: keyof ICaptchaProviderRecord;

token?: unknown;

payload: unknown;

}

名称 说明

id 本次验证码数据的id标识

provider 本次验证码所使用的Provider名称

token 本次验证码数据的token,用于比对用户输入值。在开发环境可以通过修改系统配置,将token发往前端,用于调试

payload 本次验证码的负载内容,不同的Provider有不同的payload类型

2. refresh

// refresh captcha

const captchaNew = await this.bean.captcha.refresh(captchaId, 'a-captchasimple:simple');

如果一个 Scene 配置了多个 Provider,那么在刷新 capthca 时可以基于策略选取不同的 Provider

3. verify

// verify captcha

const passed = await this.bean.captcha.verify(captchaId, '1234', 'a-captchasimple:simple');

4. verifyImmediate

前端可以对用户输入的验证码进行立即验证。立即验证之后在提交表单时仍然要进行二次验证

// verifyImmediate captcha

const tokenOrFalse = await this.bean.captcha.verifyImmediate(captchaId, '1234');

如果立即验证失败,返回false

如果立即验证成功,返回二次token

前端需要将二次token与表单数据一起发往后端进行二次验证

interceptor.captchaVerify

模块a-captcha提供了一个局部拦截器a-captcha:captchaVerify,可以针对 API 启用验证码校验

src/suite/a-home/modules/home-user/src/controller/passport.ts

import { Core } from 'vona-module-a-core';

class ControllerPassport {

@Web.post('login')

+ @Core.captchaVerify({ scene: 'a-captchasimple:simple' })

async login(@Arg.body() data) {}

}

@Core.captchaVerify: 用于使用局部拦截器a-captcha:captchaVerify,传入需要使用的 Scene 名称

该拦截器支持表单验证和二次验证

Captcha API

模块a-captcha提供了一组开箱即用的 Captcha API,对bean.captcha的能力进行了封装

src/suite-vendor/a-vona/modules/a-captcha/src/controller/captcha.ts

名称 说明

create

refresh

verifyImmediate

为何没有提供verifyAPI?

因为bean.captcha.verify方法用于局部拦截器a-captcha:captchaVerify

参数配置

可以在 App Config 中修改模块a-captcha的参数配置

src/backend/config/config/config.ts

// modules

config.modules = {

'a-captcha': {

captcha: {

showToken: false,

},

captchaProvider: {

ttl: 20 * 60 * 1000,

ttlSecondary: 20 * 60 * 1000,

},

},

};

名称 说明

captcha.showToken 是否显示token。如果为true,就将token发往前端,用于调试。默认为false

captchaProvider.ttl captcha token的过期时间

captchaProvider.ttlSecondary 二次token的过期时间

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 8:09:08

1小时打造U盘量产工具原型:快马平台实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个U盘量产工具最小可行产品(MVP),需要:1.设备识别基础功能2.单一格式化选项(FAT32)3.简易状态显示面板4.可执行的演示版本。使…

作者头像 李华
网站建设 2026/4/24 7:43:52

JavaScript新人必学:parseInt从入门到精通

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个交互式学习页面,包含:1) parseInt基础语法动画演示 2) 进制参数的可视化解释(用不同颜色区分10进制、16进制等)3) 实时练习区…

作者头像 李华
网站建设 2026/4/18 14:36:53

C#AI系列(5): C#离线实现高效OCR

本文代码已开源,仅需关注 萤火初芒 公众号回复AISharp即可查看仓库地址,获取完整项目及模型数据,供学习交流使用,无套路(部分测试图片为网图,侵删)。 本文项目在笔记本电脑上(Window…

作者头像 李华
网站建设 2026/4/18 7:22:08

汽车 KMS 如何支撑百万级 ECU 的密钥生命周期管理?

关键词:汽车KMS、ECU密钥管理、密钥生命周期、V2X、OTA、ISO/SAE 21434、国密SM2、车联网安全、安当技术引言:一辆车,上千个密钥 在传统燃油车时代,电子控制单元(ECU)数量通常在 50–100 个之间&#xff0c…

作者头像 李华
网站建设 2026/4/30 13:15:35

abogen有声书生成工具:基于Kokoro的多语言语音合成解决方案

abogen有声书生成工具:基于Kokoro的多语言语音合成解决方案 【免费下载链接】abogen Generate audiobooks from EPUBs, PDFs and text with synchronized captions. 项目地址: https://gitcode.com/GitHub_Trending/ab/abogen abogen是一款功能强大的开源有声…

作者头像 李华
网站建设 2026/4/28 5:40:02

墨菲安全MurphySec:5分钟快速上手的软件供应链安全检测工具

还在为项目中的第三方依赖问题而烦恼吗?墨菲安全MurphySec正是你需要的解决方案。作为一款专注于软件供应链安全的开源工具,它能自动扫描Java、JavaScript、Python等主流开发语言的项目依赖,精准识别潜在安全风险,为你的代码安全保…

作者头像 李华