问题
如何关闭验证码登录验证?包括 Web 前端、App 前端、后端。比如后端开启验证则 Web 和 App 都生效;如果只想 Web 生效,是否只需要配置 Web 前端?
答案
登录验证码是两层独立控制:后端 yudao.captcha.enable 决定登录接口是否强制校验(全局,Web 与 App 共用);各端 VITE_APP_CAPTCHA_ENABLE 仅决定是否弹出滑块 UI。后端开启时所有终端都会受校验约束;「Web 有滑块、App 免验证」需 后端 false + Web true + App false。
详细说明
1. 两层架构
| 层级 | 配置项 | 作用范围 | 控制什么 |
|---|---|---|---|
| 后端 | yudao.captcha.enable | 全局(Web + App 共用登录接口) | 登录/注册是否校验 captchaVerification |
| Web 前端 | VITE_APP_CAPTCHA_ENABLE | 仅 PC 管理端 | 是否弹出滑块、是否调用 /system/captcha/get |
| App 前端 | VITE_APP_CAPTCHA_ENABLE | 仅 UniApp(H5/小程序/App) | 同上 |
2. 后端配置(全局强制校验)
yudao:
captcha:
enable: true # true=强制校验,false=跳过(默认 true)| 部署模式 | 配置文件 |
|---|---|
单体(-P boot) | ruoyi-office/yudao-server/src/main/resources/application-{profile}.yaml |
| 微服务 | system 模块或 Nacos;未配置时默认 true |
项目内常见 profile 值:
| Profile | 典型值 | 说明 |
|---|---|---|
local / dev | false | 本地联调,不校验 |
prod | false(演示站) | Web 可展示滑块,App 可无滑块登录 |
| 未显式配置 | true | 代码默认值 |
核心逻辑:AdminAuthServiceImpl.doValidateCaptcha() — 当 captchaEnable=false 时直接返回成功,不再校验 captchaVerification。
修改后需重启后端。
注意:
aj.captcha.*(底图、水印、类型等)是 AjCaptcha 引擎参数,不是开关。详见 登录滑块验证码-底图与水印位置。
3. Web 前端配置(PC 管理端)
VITE_APP_CAPTCHA_ENABLE=true # 字符串 'true' 才开启
VITE_APP_CAPTCHA_ENABLE=false # 关闭以 web-antd 为例:
| 文件 | 典型值 | 用途 |
|---|---|---|
.env | true | 基础默认 |
.env.development | false | 本地 dev,不弹滑块 |
.env.production | true | 生产构建 |
判断:packages/effects/hooks/src/use-app-config.ts → isCaptchaEnable()。
登录页(apps/web-antd/src/views/_core/authentication/login.vue):开启时先弹滑块,通过后带 captchaVerification 登录;关闭时直接登录。同样影响注册、社交登录页。
修改 .env* 后需重启 dev 或重新构建(该开关不走运行时 _app.config.js)。
4. App 前端配置(UniApp)
# ruoyi-office-uniapp/env/.env
VITE_APP_CAPTCHA_ENABLE=false登录页(src/pages-core/auth/login.vue):false 时跳过滑块直接调登录接口;true 时先展示滑块组件。同样影响 register.vue、code-login.vue。
修改后需重新编译/打包各端。
5. 常见组合效果
| 后端 | Web | App | 实际效果 |
|---|---|---|---|
| ✅ true | ✅ true | ✅ true | 标准生产:全端弹滑块 + 后端校验 |
| ✅ true | ✅ true | ❌ false | Web 正常;App 无滑块会被后端拒绝 |
| ✅ true | ❌ false | ❌ false | 全端不弹滑块,登录失败 |
| ❌ false | ✅ true | ❌ false | 演示常用:Web 有滑块体验,App 直接登录 |
| ❌ false | ❌ false | ❌ false | 全关:开发/联调最省事 |
6. 「只想 Web 生效」怎么理解
- 只想 Web 弹出滑块(App 不要) → Web
true+ Appfalse;若 App 也要能登录,后端须enable: false。 - 只想 Web 强制校验、App 不校验 → 当前架构不支持。后端是全局开关,无法按终端区分。
application-prod.yaml 注释说明:
# 后端验证码开关为【全局】,不区分终端。关闭后 web 仍会弹滑块(由前端 VITE_APP_CAPTCHA_ENABLE=true 控制,仅 UI 展示),
# 但后端不再强制校验登录验证码,从而让无滑块组件的移动端(uniapp App/H5/小程序)也能正常登录。
yudao:
captcha:
enable: false7. 推荐配置场景
本地开发(全关)
- 后端
application-local.yaml/application-dev.yaml→yudao.captcha.enable: false - Web
.env.development→VITE_APP_CAPTCHA_ENABLE=false - App
env/.env→VITE_APP_CAPTCHA_ENABLE=false
生产(全端真实校验)
- 后端
enable: true - Web
.env.production→true - App
env/.env.production→true
演示站(Web 有滑块,App 简化)
- 后端
enable: false - Web
true,Appfalse
8. 其他说明
- 重置密码发短信:后端
enable=true时,重置密码场景仍会校验图形验证码(与登录前端开关无关)。 - GoView 大屏:同样使用
VITE_APP_CAPTCHA_ENABLE。
涉及代码 / 配置
| 端 | 路径 |
|---|---|
| 后端开关 | yudao-module-system-server/.../AdminAuthServiceImpl.java |
| 后端配置 | yudao-server/src/main/resources/application-{profile}.yaml |
| Web 判断 | ruoyi-office-vben/packages/effects/hooks/src/use-app-config.ts |
| Web 登录 | ruoyi-office-vben/apps/web-antd/src/views/_core/authentication/login.vue |
| App 登录 | ruoyi-office-uniapp/src/pages-core/auth/login.vue |
| 验证码接口 | POST /admin-api/system/captcha/get、/check |
相关链接
- 登录滑块验证码-底图与水印位置
- UniApp 部署文档中的
VITE_APP_CAPTCHA_ENABLE说明
修订记录
| 日期 | 修改 |
|---|---|
| 2026-06-09 | 初稿,归纳后端与 Web/App 验证码开关及组合效果 |
