From 19ebb852095f0ddd1832be5a7a7219bbed21cb94 Mon Sep 17 00:00:00 2001 From: v6ole Date: Fri, 26 Jun 2026 13:14:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=91=E5=AE=9A=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=80=81=E6=A3=80=E6=9F=A5=20+=20=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=90=8E=E8=BF=94=E5=9B=9E=E5=8E=9F=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Login.vue: - goCasdoorLogin() 前将 redirect 参数存入 sessionStorage - 登录成功后检查 sessionStorage 跳回原页面 - wecomLogin 流程同样支持 returnUrl WecomBind.vue: - onMounted 检测未登录 → 跳转 /login?redirect=/wecom-bind?token=xxx - 登录后自动回到绑定页面,auth.user 不再为空 Co-Authored-By: Claude --- frontend/src/views/Login.vue | 10 +++++++++- frontend/src/views/WecomBind.vue | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index be98454..f06ece9 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -18,6 +18,8 @@ onMounted(async () => { loading.value = true try { await auth.casdoorLogin(code, state) + const returnUrl = sessionStorage.getItem('login_return_url') + if (returnUrl) { sessionStorage.removeItem('login_return_url'); router.push(returnUrl); return } ElMessage.success('登录成功') router.push(auth.isManager ? '/m' : '/') } catch (e: any) { @@ -45,6 +47,8 @@ onMounted(async () => { name: res.data.name, role: res.data.role, }) + const returnUrl = sessionStorage.getItem('login_return_url') + if (returnUrl) { sessionStorage.removeItem('login_return_url'); router.push(returnUrl); return } ElMessage.success('登录成功') router.push(auth.isManager ? '/m' : '/') } catch (e: any) { @@ -56,7 +60,11 @@ onMounted(async () => { }) function goCasdoorLogin() { - // Redirect to Casdoor authorization page + // Save return URL before redirecting to Casdoor + const returnUrl = (route.query.redirect as string) || '' + if (returnUrl) { + sessionStorage.setItem('login_return_url', returnUrl) + } const endpoint = import.meta.env.VITE_CASDOOR_ENDPOINT const clientId = import.meta.env.VITE_CASDOOR_CLIENT_ID const redirectUri = encodeURIComponent(window.location.origin + '/login') diff --git a/frontend/src/views/WecomBind.vue b/frontend/src/views/WecomBind.vue index 02d8ed5..98548a3 100644 --- a/frontend/src/views/WecomBind.vue +++ b/frontend/src/views/WecomBind.vue @@ -18,6 +18,12 @@ onMounted(() => { if (!bindToken) { errorMsg.value = '无效的绑定链接' setTimeout(() => router.replace('/'), 2000) + return + } + if (!auth.isLoggedIn) { + // Not logged in yet — redirect to login, then come back here + router.push(`/login?redirect=${encodeURIComponent(route.fullPath)}`) + return } })