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 } })