Browse Source

feat: 接入第三方免登

zhangwl 2 months ago
parent
commit
818c1d8072
1 changed files with 34 additions and 2 deletions
  1. 34 2
      chat-ai-ui-main/src/views/HomeView.vue

+ 34 - 2
chat-ai-ui-main/src/views/HomeView.vue

@@ -1,18 +1,50 @@
 <script setup lang="ts">
 <script setup lang="ts">
-import { ref } from 'vue';
+import { ref, onMounted } from 'vue';
 import axios from 'axios';
 import axios from 'axios';
 import { useUserStore } from '../stores/user';
 import { useUserStore } from '../stores/user';
-import { useRouter } from 'vue-router';
+import { useRouter, useRoute } from 'vue-router';
 import robotImage from '../assets/robot.png';
 import robotImage from '../assets/robot.png';
 
 
 const userStore = useUserStore();
 const userStore = useUserStore();
 const router = useRouter();
 const router = useRouter();
+const route = useRoute();
 
 
 const name = ref('');
 const name = ref('');
 const password = ref('');
 const password = ref('');
 const loading = ref(false);
 const loading = ref(false);
 const error = ref('');
 const error = ref('');
 
 
+onMounted(async () => {
+  const token = route.query.token as string;
+  const source = route.query.source as string;
+
+  if (token && source) {
+    loading.value = true;
+    error.value = '';
+
+    try {
+      const { data } = await axios.post(
+        `${import.meta.env.VITE_API_URL}/users/token/third-party`,
+        {
+          token,
+          source,
+        }
+      );
+
+      userStore.setUser({
+        userId: data.access_token,
+        name: data.username,
+        refreshToken: data.refresh_token,
+      });
+
+      router.push('/chat');
+    } catch (err: any) {
+      error.value = err.response?.data?.detail || '第三方登录失败';
+      loading.value = false;
+    }
+  }
+});
+
 const loginUser = async () => {
 const loginUser = async () => {
 if (!name.value || !password.value) {
 if (!name.value || !password.value) {
   error.value = '用户名和秘密是必填项';
   error.value = '用户名和秘密是必填项';