mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-03-03 09:10:25 +00:00
Improve new-device QR handling and bypass init
Refactor new-device QR flow and streamline bypass init: - napcat-shell: stop verbose logging and removed check of enableAllBypasses return value; just invoke native enableAllBypasses when not disabled by env. - backend (QQLogin): simplify extraction of tokens from jumpUrl (use sig and uin-token), return an error if missing, and send oidbRequest directly (removed nested try/catch and regex fallback). - frontend (new_device_verify): accept result.str_url without requiring bytes_token and pass an empty string to polling when bytes_token is absent. - frontend (password_login): change render order to show captcha modal before new-device verification UI. - frontend (qq_manager): normalize GetNewDeviceQRCode response — derive bytes_token from str_url's str_url query param (base64) when bytes_token is missing, and preserve extra status/error fields in the returned object. These changes improve robustness when OIDB responses omit bytes_token, reduce noisy logs, and ensure the UI and polling still function.
This commit is contained in:
@@ -141,11 +141,37 @@ export default class QQManager {
|
||||
const data = await serverRequest.post<ServerResponse<{
|
||||
str_url?: string;
|
||||
bytes_token?: string;
|
||||
uint32_guarantee_status?: number;
|
||||
ActionStatus?: string;
|
||||
ErrorCode?: number;
|
||||
ErrorInfo?: string;
|
||||
}>>('/QQLogin/GetNewDeviceQRCode', {
|
||||
uin,
|
||||
jumpUrl,
|
||||
});
|
||||
return data.data.data;
|
||||
const result = data.data.data;
|
||||
if (result?.str_url) {
|
||||
let bytesToken = result.bytes_token || '';
|
||||
if (!bytesToken && result.str_url) {
|
||||
// 只对 str_url 参数值做 base64 编码
|
||||
try {
|
||||
const urlObj = new URL(result.str_url);
|
||||
const strUrlParam = urlObj.searchParams.get('str_url') || '';
|
||||
bytesToken = strUrlParam ? btoa(strUrlParam) : '';
|
||||
} catch {
|
||||
bytesToken = '';
|
||||
}
|
||||
}
|
||||
return {
|
||||
str_url: result.str_url,
|
||||
bytes_token: bytesToken,
|
||||
uint32_guarantee_status: result.uint32_guarantee_status,
|
||||
ActionStatus: result.ActionStatus,
|
||||
ErrorCode: result.ErrorCode,
|
||||
ErrorInfo: result.ErrorInfo,
|
||||
};
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async pollNewDeviceQR (uin: string, bytesToken: string) {
|
||||
|
||||
Reference in New Issue
Block a user