This commit is contained in:
2025-12-28 15:45:35 +08:00
parent 2c74755c0d
commit 875195f6a2
3 changed files with 83 additions and 7 deletions

View File

@@ -3,7 +3,7 @@ import type { Result, DataOpts } from '@kevisual/query/query';
import { setBaseResponse } from '@kevisual/query/query';
import { LoginCacheStore, CacheStore } from './login-cache.ts';
import { Cache } from './login-cache.ts';
import { BaseLoad } from '@kevisual/load';
export type QueryLoginOpts = {
query?: Query;
isBrowser?: boolean;
@@ -418,6 +418,12 @@ export class QueryLogin extends BaseQuery {
}
/**
* 使用web登录,创建url地址, 需要MD5和jsonwebtoken
*
*
import MD5 from 'crypto-js/md5.js';
import jsonwebtoken from 'jsonwebtoken';
*/
loginWithWeb(baseURL: string, { MD5, jsonwebtoken }: { MD5: any; jsonwebtoken: any }) {
const randomId = Math.random().toString(36).substring(2, 15);
@@ -431,4 +437,46 @@ export class QueryLogin extends BaseQuery {
const url = `${baseURL}/api/router?path=user&key=webLogin&p&loginToken=${token}&sign=${sign}&randomId=${randomId}`;
return { url, token, tokenSecret };
}
/**
*轮询登录状态
*
*
*
const res = queryLogin.loginWithWeb(baseURL, { MD5, jsonwebtoken });
await pollLoginStatus(res.token, { tokenSecret: res.tokenSecret });
* 轮询登录状态
*/
async pollLoginStatus(data: { token: string; tokenSecret: string }) {
const token = data.token;
const load = new BaseLoad();
load.load(
async () => {
const res = await this.checkLoginStatus(token);
if (res.code === 500) {
load.cancel('check-login-status');
}
return res;
},
{
key: 'check-login-status',
isReRun: true,
checkSuccess: (data) => {
return data?.code === 200;
},
},
);
const res = await load.hasLoaded('check-login-status', {
timeout: 60 * 3 * 1000, // 3分钟超时
});
if (res.code === 200 && res.data?.code === 200) {
try {
console.log('网页登录成功');
return;
} catch (error) {
console.log('登录失败', error);
return;
}
}
console.log('登录失败', res);
}
}