feat/vtk-3d-view #7
|
|
@ -240,7 +240,20 @@ void LoginWindow::refreshCaptcha()
|
|||
if (l != captchaLoad_) return; // 身份比对:仅处理最新请求
|
||||
captchaLoad_.clear();
|
||||
codeId_ = cap.codeId;
|
||||
captchaLabel_->setPixmap(renderCaptchaPixmap(cap.code));
|
||||
// 后端 getImageCode 返回的是 base64 PNG 图(data.image),直接显示;
|
||||
// 兼容旧明文 code(若后端仍回传则用客户端绘制兜底)。
|
||||
QPixmap pix;
|
||||
if (!cap.image.isEmpty()) {
|
||||
const int comma = cap.image.indexOf(QLatin1Char(',')); // 去 "data:image/png;base64," 前缀
|
||||
const QByteArray b64 =
|
||||
(comma >= 0 ? cap.image.mid(comma + 1) : cap.image).toLatin1();
|
||||
pix.loadFromData(QByteArray::fromBase64(b64));
|
||||
}
|
||||
if (pix.isNull() && !cap.code.isEmpty()) pix = renderCaptchaPixmap(cap.code);
|
||||
captchaLabel_->setPixmap(
|
||||
pix.isNull() ? pix
|
||||
: pix.scaled(captchaLabel_->size(), Qt::KeepAspectRatio,
|
||||
Qt::SmoothTransformation));
|
||||
refreshBtn_->setEnabled(true);
|
||||
});
|
||||
connect(l, &geopro::net::CaptchaLoad::failed, this, [this, l](const QString& msg) {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ CaptchaLoad::CaptchaLoad(IApiCall* call, QObject* parent) : QObject(parent), cal
|
|||
AuthService::Captcha cap;
|
||||
cap.codeId = resp.data.value(QStringLiteral("id")).toString();
|
||||
cap.code = resp.data.value(QStringLiteral("code")).toString();
|
||||
cap.image = resp.data.value(QStringLiteral("image")).toString(); // 实际验证码图(base64 data URL)
|
||||
aborted_ = true; // 终态置位:到达 done 终态后 abort() 早退
|
||||
emit done(cap);
|
||||
deleteLater();
|
||||
|
|
|
|||
|
|
@ -17,10 +17,11 @@ class AuthService {
|
|||
public:
|
||||
AuthService(ApiClient& api, std::string rsaPublicKeyPem);
|
||||
|
||||
// 验证码:服务端把答案明文回传(data.code),答案 + data.id 用于下一步校验。
|
||||
// 验证码:服务端返回 data.id + data.image(base64 PNG 图,用户照图输入);data.code 已不返回。
|
||||
struct Captcha {
|
||||
QString codeId;
|
||||
QString code;
|
||||
QString code; // 旧字段(后端已不返回明文,保留兼容)
|
||||
QString image; // data URL base64 PNG(后端 getImageCode 实际返回的验证码图)
|
||||
};
|
||||
|
||||
// 异步拉验证码:GET getImageCode;返回句柄,连 CaptchaLoad::done(Captcha)/failed(QString)。
|
||||
|
|
|
|||
Loading…
Reference in New Issue