fix(captcha): close human-verification loop end-to-end

Rewrite captcha core around aksrt_captcha_config only, require captcha
on login/comment/SMS/phone auth and related gates, wire frontend token
collection, and remove dead dual-source security settings plus slider enqueue.
This commit is contained in:
kate522 committed 2026-07-13 19:52:30 +08:00
1 parent a0808bbe54
commit 02f77b756c
21 files changed
+1163 -1515

No files matched your search

+105 -64
View File
@@ -163,9 +163,33 @@
clearMessages();
}
function withCaptcha(scene, form, next) {
var store = window.AKSRTCaptchaState && window.AKSRTCaptchaState.scenes
? window.AKSRTCaptchaState.scenes
: null;
var instance = store && store[scene] ? store[scene] : null;
if (instance && typeof instance.verify === 'function') {
instance.verify(function () {
next(serializeForm(form));
});
return;
}
next(serializeForm(form));
}
function resetCaptcha(scene) {
try {
var store = window.AKSRTCaptchaState && window.AKSRTCaptchaState.scenes
? window.AKSRTCaptchaState.scenes
: null;
if (store && store[scene] && typeof store[scene].reset === 'function') {
store[scene].reset();
}
} catch (e) { /* ignore */ }
}
function handleLogin(form) {
var payload = serializeForm(form);
if (!payload.log || !payload.pwd) {
if (!form.querySelector('[name="log"]') || !form.querySelector('[name="pwd"]')) {
showMessage('login', '请输入用户名和密码', 'error');
return;
}
@@ -173,76 +197,93 @@
setLoading(form, true);
clearMessages();
request('/auth/modal-login', payload)
.then(function (result) {
if (result.ok && result.data.success) {
onAuthSuccess(result.data);
return;
}
var message = result.data.message || '登录失败';
if (result.data.verify_url) {
message += ' <a href="' + escapeAttribute(result.data.verify_url) + '">前往验证</a>';
}
showMessage('login', message, 'error');
})
.catch(function () {
showMessage('login', '网络错误,请稍后重试', 'error');
})
.finally(function () {
withCaptcha('login', form, function (payload) {
if (!payload.log || !payload.pwd) {
setLoading(form, false);
});
showMessage('login', '请输入用户名和密码', 'error');
return;
}
request('/auth/modal-login', payload)
.then(function (result) {
if (result.ok && result.data.success) {
onAuthSuccess(result.data);
return;
}
resetCaptcha('login');
var message = result.data.message || '登录失败';
if (result.data.verify_url) {
message += ' <a href="' + escapeAttribute(result.data.verify_url) + '">前往验证</a>';
}
showMessage('login', message, 'error');
})
.catch(function () {
resetCaptcha('login');
showMessage('login', '网络错误,请稍后重试', 'error');
})
.finally(function () {
setLoading(form, false);
});
});
}
function handleRegister(form) {
var payload = serializeForm(form);
if (!payload.user_login || !payload.user_email || !payload.user_pass || !payload.user_pass_confirm) {
showMessage('register', '请完整填写注册信息', 'error');
return;
}
if (payload.user_pass !== payload.user_pass_confirm) {
showMessage('register', '两次输入的密码不一致', 'error');
return;
}
setLoading(form, true);
clearMessages();
request('/auth/modal-register', payload)
.then(function (result) {
if (!result.ok || !result.data.success) {
showMessage('register', result.data.message || '注册失败', 'error');
return;
}
if (result.data.user) {
onAuthSuccess(result.data);
return;
}
if (result.data.verification_required) {
var verifyMessage = result.data.message || '注册成功,请完成邮箱验证';
if (result.data.verify_url) {
verifyMessage += ' <a href="' + escapeAttribute(result.data.verify_url) + '">前往验证</a>';
}
showMessage('register', verifyMessage, 'success');
form.reset();
return;
}
var loginMessage = result.data.message || '注册成功,请登录';
switchTab('login');
prefillLogin(result.data.user_login || result.data.user_email || '');
showMessage('login', loginMessage, 'success');
form.reset();
})
.catch(function () {
showMessage('register', '网络错误,请稍后重试', 'error');
})
.finally(function () {
withCaptcha('register', form, function (payload) {
if (!payload.user_login || !payload.user_email || !payload.user_pass || !payload.user_pass_confirm) {
setLoading(form, false);
});
showMessage('register', '请完整填写注册信息', 'error');
return;
}
if (payload.user_pass !== payload.user_pass_confirm) {
setLoading(form, false);
showMessage('register', '两次输入的密码不一致', 'error');
return;
}
request('/auth/modal-register', payload)
.then(function (result) {
if (!result.ok || !result.data.success) {
resetCaptcha('register');
showMessage('register', result.data.message || '注册失败', 'error');
return;
}
if (result.data.user) {
onAuthSuccess(result.data);
return;
}
if (result.data.verification_required) {
var verifyMessage = result.data.message || '注册成功,请完成邮箱验证';
if (result.data.verify_url) {
verifyMessage += ' <a href="' + escapeAttribute(result.data.verify_url) + '">前往验证</a>';
}
showMessage('register', verifyMessage, 'success');
form.reset();
resetCaptcha('register');
return;
}
var loginMessage = result.data.message || '注册成功,请登录';
switchTab('login');
prefillLogin(result.data.user_login || result.data.user_email || '');
showMessage('login', loginMessage, 'success');
form.reset();
resetCaptcha('register');
})
.catch(function () {
resetCaptcha('register');
showMessage('register', '网络错误,请稍后重试', 'error');
})
.finally(function () {
setLoading(form, false);
});
});
}
function serializeForm(form) {