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", "@floating-ui/dom": "^1.7.4",
"@kevisual/ai": "^0.0.19", "@kevisual/ai": "^0.0.19",
"@kevisual/context": "^0.0.4", "@kevisual/context": "^0.0.4",
"@kevisual/kv-login": "^0.0.8", "@kevisual/kv-login": "^0.0.9",
"@kevisual/query": "0.0.31", "@kevisual/query": "0.0.31",
"@kevisual/query-login": "^0.0.7", "@kevisual/query-login": "^0.0.7",
"@kevisual/registry": "^0.0.1", "@kevisual/registry": "^0.0.1",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@kevisual/kv-login", "name": "@kevisual/kv-login",
"version": "0.0.8", "version": "0.0.9",
"description": "", "description": "",
"main": "src/main.ts", "main": "src/main.ts",
"scripts": { "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-login'
import './pages/kv-message' import './pages/kv-message'
export { loginEmitter } from './pages/kv-login' 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) console.log('使用微信公众号登录:', data)
} }
const clearCode = () => { export const clearCode = () => {
const url = new URL(window.location.href); const url = new URL(window.location.href);
// 清理 URL 中的 code 参数 // 清理 URL 中的 code 参数
url.searchParams.delete('code'); url.searchParams.delete('code');
url.searchParams.delete('state'); url.searchParams.delete('state');
url.searchParams.delete('user-check');
url.searchParams.delete('redirect');
window.history.replaceState({}, document.title, url.toString()); window.history.replaceState({}, document.title, url.toString());
} }
export const checkWechat = async () => { export const checkWechat = async () => {

10
pnpm-lock.yaml generated
View File

@@ -30,8 +30,8 @@ importers:
specifier: ^0.0.4 specifier: ^0.0.4
version: 0.0.4 version: 0.0.4
'@kevisual/kv-login': '@kevisual/kv-login':
specifier: ^0.0.8 specifier: ^0.0.9
version: 0.0.8(@kevisual/query@0.0.31) version: 0.0.9(@kevisual/query@0.0.31)
'@kevisual/query': '@kevisual/query':
specifier: 0.0.31 specifier: 0.0.31
version: 0.0.31 version: 0.0.31
@@ -890,8 +890,8 @@ packages:
'@kevisual/context@0.0.4': '@kevisual/context@0.0.4':
resolution: {integrity: sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ==} resolution: {integrity: sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ==}
'@kevisual/kv-login@0.0.8': '@kevisual/kv-login@0.0.9':
resolution: {integrity: sha512-N6nDCwI0sZkjQAiJf7JpyVvn5x3Nf2qWp9U9vzSMDyYeV/PHNzMZIr42Woma2MGFwcjMRjcnJxIC7HWARVLLsQ==} resolution: {integrity: sha512-Ge+gWRLebw25PLFP96Lz+9uQ6rlHznmxY9l6G1eFfHsggXmhi9v5ZX5nrlGx2/Va7emDizJz12SW0cjlQ/BZog==}
'@kevisual/logger@0.0.4': '@kevisual/logger@0.0.4':
resolution: {integrity: sha512-+fpr92eokSxoGOW1SIRl/27lPuO+zyY+feR5o2Q4YCNlAdt2x64NwC/w8r/3NEC5QenLgd4K0azyKTI2mHbARw==} resolution: {integrity: sha512-+fpr92eokSxoGOW1SIRl/27lPuO+zyY+feR5o2Q4YCNlAdt2x64NwC/w8r/3NEC5QenLgd4K0azyKTI2mHbARw==}
@@ -4499,7 +4499,7 @@ snapshots:
'@kevisual/context@0.0.4': {} '@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: dependencies:
'@kevisual/context': 0.0.4 '@kevisual/context': 0.0.4
'@kevisual/query-login': 0.0.7(@kevisual/query@0.0.31) '@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 { useUserStore } from "./store.ts";
import { useShallow } from 'zustand/shallow'; import { useShallow } from 'zustand/shallow';
import '@kevisual/kv-login'; import '@kevisual/kv-login';
import { clearCode } from '@kevisual/kv-login'
import { useContextKey } from "@kevisual/context"; import { useContextKey } from "@kevisual/context";
import { toast as message } from 'react-toastify';
import { Dialog, DialogContent, DialogHeader, DialogTrigger } from "@/components/ui/dialog"; 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 }) => { export const LoginComponent = ({ onLoginSuccess }: { onLoginSuccess: () => void }) => {
useEffect(() => { useEffect(() => {
// 监听登录成功事件 // 监听登录成功事件
@@ -42,6 +71,7 @@ export const Nav = () => {
useEffect(() => { useEffect(() => {
store.queryUser(); store.queryUser();
store.init(); store.init();
checkPluginLogin();
}, []); }, []);
const handleLoginSuccess = () => { const handleLoginSuccess = () => {