From 267b088242dec966b71cdd8811664dbfd4153439 Mon Sep 17 00:00:00 2001 From: zhenhui <1276357500@qq.com> Date: Tue, 3 Mar 2026 18:55:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- saiadmin-artd/.env | 3 ++ saiadmin-artd/.env.production | 3 ++ saiadmin-artd/src/types/api/api.d.ts | 6 ++-- saiadmin-artd/src/types/config/index.ts | 2 ++ saiadmin-artd/src/views/auth/login/index.vue | 32 ++++++++++++------- .../app/controller/LoginController.php | 9 ++++-- server/plugin/saiadmin/config/saithink.php | 6 ++-- 7 files changed, 42 insertions(+), 19 deletions(-) diff --git a/saiadmin-artd/.env b/saiadmin-artd/.env index 402bfb1..6b9933a 100644 --- a/saiadmin-artd/.env +++ b/saiadmin-artd/.env @@ -20,3 +20,6 @@ VITE_OPEN_ROUTE_INFO = false # 锁屏加密密钥 VITE_LOCK_ENCRYPT_KEY = s3cur3k3y4adpro + +# 登录页是否显示验证码,设为 false 可关闭(需与后端 LOGIN_CAPTCHA_ENABLE 一致) +VITE_LOGIN_CAPTCHA_ENABLED = false diff --git a/saiadmin-artd/.env.production b/saiadmin-artd/.env.production index d88ff97..c173192 100644 --- a/saiadmin-artd/.env.production +++ b/saiadmin-artd/.env.production @@ -7,5 +7,8 @@ VITE_BASE_URL = ./ # API 根地址(后端路由为 /core、/tool、/dice 等,无 /prod 前缀,不要加 /prod) VITE_API_URL = https://dice-api.yuliao666.top +# 登录页是否显示验证码,设为 false 可关闭(需与后端 LOGIN_CAPTCHA_ENABLE 一致) +VITE_LOGIN_CAPTCHA_ENABLED = false + # Delete console VITE_DROP_CONSOLE = true \ No newline at end of file diff --git a/saiadmin-artd/src/types/api/api.d.ts b/saiadmin-artd/src/types/api/api.d.ts index 38ba1ba..2290854 100644 --- a/saiadmin-artd/src/types/api/api.d.ts +++ b/saiadmin-artd/src/types/api/api.d.ts @@ -82,12 +82,12 @@ declare namespace Api { image: string } - /** 登录参数 */ + /** 登录参数(关闭验证码时可不传 code、uuid) */ interface LoginParams { username: string password: string - code: string - uuid: string + code?: string + uuid?: string } /** 登录响应 */ diff --git a/saiadmin-artd/src/types/config/index.ts b/saiadmin-artd/src/types/config/index.ts index dd144de..a26c138 100644 --- a/saiadmin-artd/src/types/config/index.ts +++ b/saiadmin-artd/src/types/config/index.ts @@ -164,6 +164,8 @@ export interface EnvConfig { VITE_USE_GZIP?: string // 是否开启 CDN VITE_USE_CDN?: string + // 登录页是否启用验证码,设为 false 或 0 关闭 + VITE_LOGIN_CAPTCHA_ENABLED?: string } // 应用配置 diff --git a/saiadmin-artd/src/views/auth/login/index.vue b/saiadmin-artd/src/views/auth/login/index.vue index caa9bf2..291fa80 100644 --- a/saiadmin-artd/src/views/auth/login/index.vue +++ b/saiadmin-artd/src/views/auth/login/index.vue @@ -35,7 +35,7 @@ show-password /> - + () + /** 是否启用登录验证码(与后端 LOGIN_CAPTCHA_ENABLE 保持一致) */ + const captchaEnabled = computed(() => { + const v = import.meta.env.VITE_LOGIN_CAPTCHA_ENABLED + return v !== 'false' && v !== '0' + }) + const formData = reactive({ username: '', password: '', @@ -123,16 +129,21 @@ rememberPassword: true }) - const rules = computed(() => ({ - username: [{ required: true, message: t('login.placeholder.username'), trigger: 'blur' }], - password: [{ required: true, message: t('login.placeholder.password'), trigger: 'blur' }], - code: [{ required: true, message: t('login.placeholder.code'), trigger: 'blur' }] - })) + const rules = computed(() => { + const r: FormRules = { + username: [{ required: true, message: t('login.placeholder.username'), trigger: 'blur' }], + password: [{ required: true, message: t('login.placeholder.password'), trigger: 'blur' }] + } + if (captchaEnabled.value) { + r.code = [{ required: true, message: t('login.placeholder.code'), trigger: 'blur' }] + } + return r + }) const loading = ref(false) onMounted(() => { - refreshCaptcha() + if (captchaEnabled.value) refreshCaptcha() }) // 登录 @@ -146,12 +157,11 @@ loading.value = true - // 登录请求 + // 登录请求(关闭验证码时不传 code/uuid) const { access_token, refresh_token } = await fetchLogin({ username: formData.username, password: formData.password, - code: formData.code, - uuid: formData.uuid + ...(captchaEnabled.value ? { code: formData.code, uuid: formData.uuid } : {}) }) // 验证token @@ -178,7 +188,7 @@ console.error('[Login] Unexpected error:', error) } } finally { - refreshCaptcha() + if (captchaEnabled.value) refreshCaptcha() loading.value = false } } diff --git a/server/plugin/saiadmin/app/controller/LoginController.php b/server/plugin/saiadmin/app/controller/LoginController.php index 97c372e..246a7d6 100644 --- a/server/plugin/saiadmin/app/controller/LoginController.php +++ b/server/plugin/saiadmin/app/controller/LoginController.php @@ -49,9 +49,12 @@ class LoginController extends BaseController $code = $request->post('code', ''); $uuid = $request->post('uuid', ''); - $captcha = new Captcha(); - if (!$captcha->checkCaptcha($uuid, $code)) { - return $this->fail('验证码错误'); + $captchaEnabled = config('plugin.saiadmin.saithink.captcha.enable', true); + if ($captchaEnabled) { + $captcha = new Captcha(); + if (!$captcha->checkCaptcha($uuid, $code)) { + return $this->fail('验证码错误'); + } } $logic = new SystemUserLogic(); $data = $logic->login($username, $password, $type); diff --git a/server/plugin/saiadmin/config/saithink.php b/server/plugin/saiadmin/config/saithink.php index 688b0c6..b045857 100644 --- a/server/plugin/saiadmin/config/saithink.php +++ b/server/plugin/saiadmin/config/saithink.php @@ -8,9 +8,11 @@ return [ 'access_exp' => 8 * 60 * 60, // 登录token有效期,默认8小时 - // 验证码存储模式 + // 验证码配置 'captcha' => [ - // 验证码存储模式 session或者cache + // 是否启用登录验证码。改为 false 即关闭;也可用环境变量 LOGIN_CAPTCHA_ENABLE=0 关闭 + 'enable' => filter_var(getenv('LOGIN_CAPTCHA_ENABLE') ?: '0', FILTER_VALIDATE_BOOLEAN), + // 验证码存储模式 session 或 cache 'mode' => getenv('CAPTCHA_MODE'), // 验证码过期时间 (秒) 'expire' => 300,