This commit is contained in:
2025-12-09 10:34:24 +08:00
parent bc2298ff83
commit 78927afd7a
6 changed files with 44 additions and 12 deletions

View File

@@ -24,7 +24,7 @@
"@floating-ui/dom": "^1.7.4",
"@kevisual/ai": "^0.0.19",
"@kevisual/context": "^0.0.4",
"@kevisual/kv-login": "^0.0.8",
"@kevisual/kv-login": "^0.0.9",
"@kevisual/query": "0.0.31",
"@kevisual/query-login": "^0.0.7",
"@kevisual/registry": "^0.0.1",

View File

@@ -1,6 +1,6 @@
{
"name": "@kevisual/kv-login",
"version": "0.0.8",
"version": "0.0.9",
"description": "",
"main": "src/main.ts",
"scripts": {

View File

@@ -1,7 +1,7 @@
import { checkPluginLogin } from './modules/login-handle';
import { checkPluginLogin, clearCode } from './modules/login-handle';
import './pages/kv-login'
import './pages/kv-message'
export { loginEmitter } from './pages/kv-login'
export { checkPluginLogin }
export { checkPluginLogin, clearCode }

View File

@@ -93,11 +93,13 @@ const loginByWeChatMp = async (data: { wechatMpCode: string }) => {
console.log('使用微信公众号登录:', data)
}
const clearCode = () => {
export const clearCode = () => {
const url = new URL(window.location.href);
// 清理 URL 中的 code 参数
url.searchParams.delete('code');
url.searchParams.delete('state');
url.searchParams.delete('user-check');
url.searchParams.delete('redirect');
window.history.replaceState({}, document.title, url.toString());
}
export const checkWechat = async () => {

10
pnpm-lock.yaml generated
View File

@@ -30,8 +30,8 @@ importers:
specifier: ^0.0.4
version: 0.0.4
'@kevisual/kv-login':
specifier: ^0.0.8
version: 0.0.8(@kevisual/query@0.0.31)
specifier: ^0.0.9
version: 0.0.9(@kevisual/query@0.0.31)
'@kevisual/query':
specifier: 0.0.31
version: 0.0.31
@@ -890,8 +890,8 @@ packages:
'@kevisual/context@0.0.4':
resolution: {integrity: sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ==}
'@kevisual/kv-login@0.0.8':
resolution: {integrity: sha512-N6nDCwI0sZkjQAiJf7JpyVvn5x3Nf2qWp9U9vzSMDyYeV/PHNzMZIr42Woma2MGFwcjMRjcnJxIC7HWARVLLsQ==}
'@kevisual/kv-login@0.0.9':
resolution: {integrity: sha512-Ge+gWRLebw25PLFP96Lz+9uQ6rlHznmxY9l6G1eFfHsggXmhi9v5ZX5nrlGx2/Va7emDizJz12SW0cjlQ/BZog==}
'@kevisual/logger@0.0.4':
resolution: {integrity: sha512-+fpr92eokSxoGOW1SIRl/27lPuO+zyY+feR5o2Q4YCNlAdt2x64NwC/w8r/3NEC5QenLgd4K0azyKTI2mHbARw==}
@@ -4499,7 +4499,7 @@ snapshots:
'@kevisual/context@0.0.4': {}
'@kevisual/kv-login@0.0.8(@kevisual/query@0.0.31)':
'@kevisual/kv-login@0.0.9(@kevisual/query@0.0.31)':
dependencies:
'@kevisual/context': 0.0.4
'@kevisual/query-login': 0.0.7(@kevisual/query@0.0.31)

View File

@@ -2,10 +2,39 @@ import { useEffect, useState } from "react";
import { useUserStore } from "./store.ts";
import { useShallow } from 'zustand/shallow';
import '@kevisual/kv-login';
import { clearCode } from '@kevisual/kv-login'
import { useContextKey } from "@kevisual/context";
import { toast as message } from 'react-toastify';
import { Dialog, DialogContent, DialogHeader, DialogTrigger } from "@/components/ui/dialog";
import { queryLogin as query } from '@/modules/query';
export const checkPluginLogin = async () => {
const userCheck = 'user-check';
const url = new URL(location.href);
const redirect = url.searchParams.get('redirect');
const redirectUrl = redirect ? decodeURIComponent(redirect) : '';
const checkKey = url.searchParams.get(userCheck);
if (redirect && checkKey) {
// 通过refresh_token 刷新token
const me = await query.getMe();
if (me.code === 200) {
message.success('登录插件中...');
const token = await query.cacheStore.getAccessToken();
const newRedirectUrl = new URL(redirectUrl);
newRedirectUrl.searchParams.set('token', token + '');
setTimeout(() => {
window.open(newRedirectUrl.toString(), '_blank');
clearCode();
}, 1000);
return;
} else {
clearCode();
const state = useUserStore.getState()
state.setOpen(true);
}
// 刷新token失败登陆页自己跳转
}
console.log('checkKey', checkKey, redirectUrl);
}
export const LoginComponent = ({ onLoginSuccess }: { onLoginSuccess: () => void }) => {
useEffect(() => {
// 监听登录成功事件
@@ -42,6 +71,7 @@ export const Nav = () => {
useEffect(() => {
store.queryUser();
store.init();
checkPluginLogin();
}, []);
const handleLoginSuccess = () => {