update query login
This commit is contained in:
parent
ca269e5ae2
commit
b2ad3da8d8
@ -5,7 +5,8 @@
|
|||||||
"main": "dist/query-login.js",
|
"main": "dist/query-login.js",
|
||||||
"types": "dist/query-login.d.ts",
|
"types": "dist/query-login.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsup"
|
"build": "tsup",
|
||||||
|
"watch": "tsup --watch"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "abearxiong <xiongxiao@xiongxiao.me>",
|
"author": "abearxiong <xiongxiao@xiongxiao.me>",
|
||||||
|
@ -103,19 +103,6 @@ export class QueryLogin {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
|
|
||||||
* @param res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
async check401ToRefreshToken(res: Result) {
|
|
||||||
const refreshToken = await this.cache.getRefreshToken();
|
|
||||||
if (refreshToken) {
|
|
||||||
const res = await this.queryRefreshToken(refreshToken);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
|
* 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
|
||||||
* @param response
|
* @param response
|
||||||
@ -153,6 +140,7 @@ export class QueryLogin {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return response as any;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获取用户信息
|
* 获取用户信息
|
||||||
@ -180,8 +168,12 @@ export class QueryLogin {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
async postSwitchUser(username: string) {
|
* 请求更新,切换用户, 使用switchUser
|
||||||
|
* @param username
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
private async postSwitchUser(username: string) {
|
||||||
return this.post({ key: 'switchCheck', data: { username } });
|
return this.post({ key: 'switchCheck', data: { username } });
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -194,7 +186,7 @@ export class QueryLogin {
|
|||||||
const user = localUserList.find((userItem) => userItem.user.username === username);
|
const user = localUserList.find((userItem) => userItem.user.username === username);
|
||||||
if (user) {
|
if (user) {
|
||||||
this.storage.setItem('token', user.accessToken || '');
|
this.storage.setItem('token', user.accessToken || '');
|
||||||
await this.cache.setLoginUser(user);
|
await this.beforeSetLoginUser({ accessToken: user.accessToken, refreshToken: user.refreshToken });
|
||||||
return {
|
return {
|
||||||
code: 200,
|
code: 200,
|
||||||
data: {
|
data: {
|
||||||
@ -208,8 +200,9 @@ export class QueryLogin {
|
|||||||
const res = await this.postSwitchUser(username);
|
const res = await this.postSwitchUser(username);
|
||||||
|
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
this.cache.setLoginUser(res.data);
|
const { accessToken, refreshToken } = res?.data || {};
|
||||||
await this.beforeSetLoginUser({ accessToken: res.data.accessToken, refreshToken: res.data.refreshToken });
|
this.storage.setItem('token', accessToken || '');
|
||||||
|
await this.beforeSetLoginUser({ accessToken, refreshToken });
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,9 @@
|
|||||||
"@kevisual/center-components": "workspace:*",
|
"@kevisual/center-components": "workspace:*",
|
||||||
"@kevisual/codemirror": "workspace:*",
|
"@kevisual/codemirror": "workspace:*",
|
||||||
"@kevisual/container": "1.0.0",
|
"@kevisual/container": "1.0.0",
|
||||||
"@kevisual/query": "^0.0.12",
|
"@kevisual/query": "^0.0.13",
|
||||||
"@kevisual/query-config": "workspace:*",
|
"@kevisual/query-config": "workspace:*",
|
||||||
|
"@kevisual/query-login": "workspace:*",
|
||||||
"@kevisual/resources": "workspace:*",
|
"@kevisual/resources": "workspace:*",
|
||||||
"@kevisual/system-ui": "^0.0.3",
|
"@kevisual/system-ui": "^0.0.3",
|
||||||
"@kevisual/ui": "^0.0.2",
|
"@kevisual/ui": "^0.0.2",
|
||||||
|
18
pnpm-lock.yaml
generated
18
pnpm-lock.yaml
generated
@ -30,11 +30,14 @@ importers:
|
|||||||
specifier: 1.0.0
|
specifier: 1.0.0
|
||||||
version: 1.0.0(@emotion/css@11.13.4)(@types/react@19.0.12)(crypto-js@4.2.0)(eventemitter3@5.0.1)(immer@10.1.1)(react@19.0.0)(rollup@4.36.0)(typescript@5.8.2)
|
version: 1.0.0(@emotion/css@11.13.4)(@types/react@19.0.12)(crypto-js@4.2.0)(eventemitter3@5.0.1)(immer@10.1.1)(react@19.0.0)(rollup@4.36.0)(typescript@5.8.2)
|
||||||
'@kevisual/query':
|
'@kevisual/query':
|
||||||
specifier: ^0.0.12
|
specifier: ^0.0.13
|
||||||
version: 0.0.12(ws@8.18.1)
|
version: 0.0.13(ws@8.18.1)
|
||||||
'@kevisual/query-config':
|
'@kevisual/query-config':
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:libs/query-config
|
version: link:libs/query-config
|
||||||
|
'@kevisual/query-login':
|
||||||
|
specifier: workspace:*
|
||||||
|
version: link:libs/query-login
|
||||||
'@kevisual/resources':
|
'@kevisual/resources':
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:packages/resources
|
version: link:packages/resources
|
||||||
@ -1162,6 +1165,9 @@ packages:
|
|||||||
'@kevisual/query@0.0.12':
|
'@kevisual/query@0.0.12':
|
||||||
resolution: {integrity: sha512-/1lZJhNCdcNG4a2Nncl55XC/nha5+GZiJPQdP77lufv2dnZfcssA7NHSZ2Ubh0Pm0HWV22IiGfQMiaYl2pkK1Q==}
|
resolution: {integrity: sha512-/1lZJhNCdcNG4a2Nncl55XC/nha5+GZiJPQdP77lufv2dnZfcssA7NHSZ2Ubh0Pm0HWV22IiGfQMiaYl2pkK1Q==}
|
||||||
|
|
||||||
|
'@kevisual/query@0.0.13':
|
||||||
|
resolution: {integrity: sha512-gSEIDiCvwSaLLAFZv4vam4wSrMsaCuQ3VGjE3kwRwZ8urlVH1TOA+NUO908A22p9m1Iij7Y1Q/JlfSJi2QzuKQ==}
|
||||||
|
|
||||||
'@kevisual/router@0.0.7':
|
'@kevisual/router@0.0.7':
|
||||||
resolution: {integrity: sha512-4n1Tp4YLoraJv7jtfy7jbuLGyAj0B2QkTlnlEDHCUTlEUOvOkjtf7DHAe2SL92fTgXhSbod0I/0vUcDF85oj/w==}
|
resolution: {integrity: sha512-4n1Tp4YLoraJv7jtfy7jbuLGyAj0B2QkTlnlEDHCUTlEUOvOkjtf7DHAe2SL92fTgXhSbod0I/0vUcDF85oj/w==}
|
||||||
|
|
||||||
@ -4825,6 +4831,14 @@ snapshots:
|
|||||||
- ws
|
- ws
|
||||||
- zod
|
- zod
|
||||||
|
|
||||||
|
'@kevisual/query@0.0.13(ws@8.18.1)':
|
||||||
|
dependencies:
|
||||||
|
openai: 4.89.0(ws@8.18.1)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
- ws
|
||||||
|
- zod
|
||||||
|
|
||||||
'@kevisual/router@0.0.7':
|
'@kevisual/router@0.0.7':
|
||||||
dependencies:
|
dependencies:
|
||||||
path-to-regexp: 8.2.0
|
path-to-regexp: 8.2.0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { query } from '@/modules/query';
|
import { query, queryLogin } from '@/modules';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { message } from '@/modules/message';
|
import { message } from '@/modules/message';
|
||||||
export const getIsMac = async () => {
|
export const getIsMac = async () => {
|
||||||
@ -69,10 +69,7 @@ export const useLayoutStore = create<LayoutStore>((set) => ({
|
|||||||
me: {},
|
me: {},
|
||||||
setMe: (me) => set({ me }),
|
setMe: (me) => set({ me }),
|
||||||
getMe: async () => {
|
getMe: async () => {
|
||||||
const res = await query.post({
|
const res = await queryLogin.getMe();
|
||||||
path: 'user',
|
|
||||||
key: 'me',
|
|
||||||
});
|
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
set({ me: res.data });
|
set({ me: res.data });
|
||||||
}
|
}
|
||||||
@ -80,19 +77,12 @@ export const useLayoutStore = create<LayoutStore>((set) => ({
|
|||||||
openUser: false,
|
openUser: false,
|
||||||
setOpenUser: (openUser) => set({ openUser }),
|
setOpenUser: (openUser) => set({ openUser }),
|
||||||
switchOrg: async (username?: string, type?: string) => {
|
switchOrg: async (username?: string, type?: string) => {
|
||||||
const res = await query.post({
|
const res = await queryLogin.switchUser(username || '');
|
||||||
path: 'user',
|
|
||||||
key: 'switchOrg',
|
|
||||||
data: {
|
|
||||||
username,
|
|
||||||
type,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
const { token } = res.data;
|
|
||||||
query.saveToken(token);
|
|
||||||
message.success('Switch success');
|
message.success('Switch success');
|
||||||
window.location.reload();
|
setTimeout(() => {
|
||||||
|
window.location.reload();
|
||||||
|
}, 1000);
|
||||||
} else {
|
} else {
|
||||||
message.error(res.message || 'Request failed');
|
message.error(res.message || 'Request failed');
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,27 @@ import { QueryClient } from '@kevisual/query';
|
|||||||
import { modal } from './redirect-to-login';
|
import { modal } from './redirect-to-login';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { message } from './message';
|
import { message } from './message';
|
||||||
|
import { QueryLogin } from '@kevisual/query-login';
|
||||||
|
|
||||||
export const query = new QueryClient();
|
export const query = new QueryClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录查询
|
||||||
|
*/
|
||||||
|
export const queryLogin = new QueryLogin({
|
||||||
|
query,
|
||||||
|
});
|
||||||
|
// @ts-ignore
|
||||||
|
if (window.context) {
|
||||||
|
// @ts-ignore
|
||||||
|
window.context.queryLogin = queryLogin;
|
||||||
|
} else {
|
||||||
|
// @ts-ignore
|
||||||
|
window.context = {
|
||||||
|
queryLogin,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// 在请求之前,如果stop了
|
||||||
query.beforeRequest = async (config) => {
|
query.beforeRequest = async (config) => {
|
||||||
if (config.headers) {
|
if (config.headers) {
|
||||||
const token = localStorage.getItem('token');
|
const token = localStorage.getItem('token');
|
||||||
@ -12,16 +32,21 @@ query.beforeRequest = async (config) => {
|
|||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
};
|
};
|
||||||
query.afterResponse = async (res) => {
|
query.afterResponse = async (res, ctx) => {
|
||||||
if (res.code === 401) {
|
if (res?.code === 401) {
|
||||||
modal.setOpen(true);
|
if (query?.stop) {
|
||||||
}
|
return { code: 500, success: false, message: '登录已过期' };
|
||||||
if (res.code === 403) {
|
|
||||||
if (!res?.message) {
|
|
||||||
message.error('Unauthorized');
|
|
||||||
}
|
}
|
||||||
|
query.stop = true;
|
||||||
|
const queryLoginRes = await queryLogin.afterCheck401ToRefreshToken(res, ctx);
|
||||||
|
query.stop = false;
|
||||||
|
if (queryLoginRes.code === 401) {
|
||||||
|
modal.setOpen(true);
|
||||||
|
}
|
||||||
|
return queryLoginRes;
|
||||||
}
|
}
|
||||||
return res;
|
|
||||||
|
return res as any;
|
||||||
};
|
};
|
||||||
export const request = query.post;
|
export const request = query.post;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { query } from '@/modules';
|
import { query, queryLogin } from '@/modules';
|
||||||
import { message } from '@/modules/message';
|
import { message } from '@/modules/message';
|
||||||
type UserStore = {
|
type UserStore = {
|
||||||
showEdit: boolean;
|
showEdit: boolean;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { query } from '@/modules';
|
import { query, queryLogin } from '@/modules';
|
||||||
import { basename } from '@/modules/basename';
|
import { basename } from '@/modules/basename';
|
||||||
import { message } from '@/modules/message';
|
import { message } from '@/modules/message';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
|
|
||||||
// 如果自己是在iframe中登录,需要调用这个方法
|
// 如果自己是在iframe中登录,需要调用这个方法
|
||||||
export const postLoginInIframe = (token: string) => {
|
export const postLoginInIframe = (token: string) => {
|
||||||
console.log('window.parent !== window', window.parent !== window);
|
console.log('window.parent !== window', window.parent !== window);
|
||||||
@ -54,16 +55,14 @@ export const useLoginStore = create<LoginStore>((set, get) => {
|
|||||||
}
|
}
|
||||||
set({ loading: true });
|
set({ loading: true });
|
||||||
const loaded = message.loading('loading...', 0);
|
const loaded = message.loading('loading...', 0);
|
||||||
const res = await query.post({ path: 'user', key: 'login', username, password });
|
const res = await queryLogin.login({ username, password });
|
||||||
setTimeout(loaded, 200);
|
setTimeout(loaded, 200);
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
const { token } = res.data;
|
|
||||||
message.success('Success');
|
message.success('Success');
|
||||||
set({ isLogin: true });
|
set({ isLogin: true });
|
||||||
query.saveToken(token);
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||||
if (window.parent !== window) {
|
if (window.parent !== window) {
|
||||||
postLoginInIframe(token);
|
postLoginInIframe(res.data?.accessToken || '');
|
||||||
await new Promise((resolve) => setTimeout(resolve, 3000));
|
await new Promise((resolve) => setTimeout(resolve, 3000));
|
||||||
}
|
}
|
||||||
const search = new URLSearchParams(window.location.search);
|
const search = new URLSearchParams(window.location.search);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user