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:
1 parent
a0808bbe54
commit
02f77b756c
21 files changed
+1163
-1515
No files matched your search
+105
-64
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user