fix(captcha): 1:1 align bind-phone and real status contracts

Add bind_phone captcha scene across schema/runtime/UI, require captcha on
phone bind, return real captcha status objects instead of legacy option
aliases, and harden form discovery for page-sign auth forms.
This commit is contained in:
2026-07-13 21:14:31 +08:00
parent fa1ab52b8b
commit 7a4419d0dd
11 changed files with 210 additions and 38 deletions
@@ -148,13 +148,6 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
$flat["{$key}_provider"] = (string) ($svc['provider'] ?? '');
}
// 保留旧布尔字段兼容
$flat['sms_enabled'] = !empty($services['sms']['enabled']);
$flat['wechat_enabled'] = !empty($services['wechat']['enabled']);
$flat['captcha_enabled'] = !empty($services['captcha']['enabled']);
$flat['baidu_push_enabled'] = !empty($services['push']['enabled']);
$flat['content_audit_enabled'] = !empty($services['audit']['enabled']);
return $this->success([
'data' => $flat,
'services' => $services,
@@ -173,12 +166,11 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
$email_gate_enabled = false;
}
$captcha_summary = function_exists('aksrt_get_captcha_status_summary')
$captcha = function_exists('aksrt_get_captcha_status_summary')
? aksrt_get_captcha_status_summary()
: ['enabled' => false, 'configured' => false, 'scenes' => []];
$captcha_comment_enabled = !empty($captcha_summary['scenes']['comment']);
: ['enabled' => false, 'provider' => '', 'configured' => false, 'scenes' => []];
$features = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_cms_features() : [];
$captcha_download_enabled = !empty($features['download_captcha']) && !empty($captcha_summary['scenes']['download']);
$scenes = is_array($captcha['scenes'] ?? null) ? $captcha['scenes'] : [];
$risk_switches = [
'show_unapproved_comments' => !empty($settings['show_unapproved_comments']),
@@ -188,17 +180,25 @@ class AKSRT_Admin_Extension_Controller extends AKSRT_Admin_Controller_Base {
return $this->success([
'data' => [
'email_gate_enabled' => $email_gate_enabled,
'captcha_comment_enabled' => $captcha_comment_enabled,
'captcha_download_enabled' => $captcha_download_enabled,
'content_audit_enabled' => !empty($services['audit']['enabled']),
'content_audit_configured' => !empty($services['audit']['configured']),
'ip_geo_enabled' => !empty($services['ip_geo']['enabled']),
'ip_geo_configured' => !empty($services['ip_geo']['configured']),
'captcha_enabled' => !empty($captcha_summary['enabled']) && !empty($captcha_summary['configured']),
'captcha_summary' => $captcha_summary,
'risk_switches' => $risk_switches,
'services' => $services,
'email_gate_enabled' => $email_gate_enabled,
'captcha' => [
'enabled' => !empty($captcha['enabled']),
'provider' => (string) ($captcha['provider'] ?? ''),
'configured' => !empty($captcha['configured']),
'scenes' => $scenes,
'download_required' => !empty($features['download_captcha']),
'download_active' => !empty($features['download_captcha']) && !empty($scenes['download']),
],
'content_audit' => [
'enabled' => !empty($services['audit']['enabled']),
'configured' => !empty($services['audit']['configured']),
],
'ip_geo' => [
'enabled' => !empty($services['ip_geo']['enabled']),
'configured' => !empty($services['ip_geo']['configured']),
],
'risk_switches' => $risk_switches,
'services' => $services,
],
]);
}