فهرست منبع

优化 微信登录

wuhongshuang 2 سال پیش
والد
کامیت
97d69a37b9
4فایلهای تغییر یافته به همراه69 افزوده شده و 19 حذف شده
  1. 2 0
      src/router/index.js
  2. 5 4
      src/service/login.js
  3. 10 15
      src/views/login.vue
  4. 52 0
      src/views/wxLogin.vue

+ 2 - 0
src/router/index.js

@@ -10,6 +10,8 @@ const router = createRouter({
     { path: '/home', name: 'home', component: () => import('@/views/home/index.vue'), meta: { index: 1 } },
     // 登录页面
     { path: '/login', name: 'login', component: () => import('@/views/login.vue'), meta: { index: 1, noLogin: true } },
+    // 微信登录跳板
+    { path: '/wxLogin', name: 'wxLogin', component: () => import('@/views/wxLogin.vue'), meta: { index: 1, noLogin: true } },
     // 注册页面
     { path: '/register', name: 'register', component: () => import('@/views/register.vue'), meta: { index: 1, noLogin: true } },
     // 忘记密码页面

+ 5 - 4
src/service/login.js

@@ -11,9 +11,10 @@ export function getSys(params) {
 }
 // 微信授权 -> 获取 openid
 export function getOpenid() {
-  return axios.get('/SZWL-SERVER/wxLogin/menuOauth').then(response => response.data);
+  return axios.get('/SZWL-SERVER/wxLogin/menuOauth');
 }
-// 微信登录
-export function wxLogin(openid) {
-  return axios.get('/SZWL-SERVER/wxLogin/wxLogin', { params: { openid } }).then(response => response.data);
+
+// 用微信code 获取openid,再获取用户信息
+export function getUserDetailByWxCode(code) {
+  return axios.get('/SZWL-SERVER/wxLogin/getUserDetailByWxCode', { params: { code } });
 }

+ 10 - 15
src/views/login.vue

@@ -81,7 +81,7 @@
 import md5 from "js-md5";
 import {onMounted, ref, computed, reactive} from "vue";
 import {Toast, Dialog, Button} from "vant";
-import {login, getSys, wxLogin, getOpenid} from "@/service/login";
+import {login, getSys, getOpenid} from "@/service/login";
 import {setLocal, getLocal, navigatorLanguage} from "@/common/js/utils";
 import sHeader from "@/components/SimpleHeader";
 import logiLogoImgUrl from "@/assets/login/logo.png";
@@ -158,6 +158,7 @@ export default {
       });
       if (data.code === "00000") {
         setLocal("loginUser", JSON.stringify(data.data));
+        console.log('loginUser JSON:',JSON.stringify(data.data));
         Toast.success(t('login.loginSucess'));
         // 需要刷新页面,否则 axios.js 文件里的 token 不会被重置
         // window.location.href = '/';
@@ -184,22 +185,16 @@ export default {
     const wxLoginHandler = async () => {
       state.isLoading = true;
       try {
-        // 用户静默授权,获取 openid
-        const { data: { data: { openid } } } = await getOpenid();
-        if (openid) {
-          // 调用后端接口进行微信登录
-          const { data: { code, message } } = await wxLogin(openid);
-          if (code === "00000") {
-            // 登录成功,跳转到 home 页面
-            await router.push('/home');
-            return;
-          }
-          throw new Error(message || '登录失败');
+        // 用户静默授权,获取 用户信息
+        const {data}  = await getOpenid();
+        console.log("微信登录:",data)
+        if (data.code === "00000") {
+          window.location.href = data.data;
+        } else {
+          Toast.fail('微信登录失败:'+data.message);
         }
-        // 未获取到 openid
-        throw new Error('微信授权失败');
       } catch (error) {
-        handleError(error.message || '登录失败,请重试');
+        handleError(error.message || '微信登录失败,请重试');
       } finally {
         state.isLoading = false;
       }

+ 52 - 0
src/views/wxLogin.vue

@@ -0,0 +1,52 @@
+<template>
+  <div></div>
+</template>
+
+<script>
+import {onMounted} from "vue";
+import {Toast, Dialog, Button} from "vant";
+import {useRoute, useRouter} from "vue-router";
+import {useI18n} from "vue-i18n";
+import {setLocal} from "../common/js/utils";
+import {getUserDetailByWxCode} from "@/service/login";
+
+/**
+ * 微信登录跳板
+ */
+export default {
+  setup() {
+    const { t} = useI18n();
+    const router = useRouter();
+    const route = useRoute();
+    const code = route.query.code;
+    // 页面初始化
+    onMounted(() => {
+      console.log('获取页面参数code:',code);
+      if(code){
+        loginByCode(code);
+      }
+    });
+    // 登录
+    const loginByCode = async (code) => {
+      const {data} = await getUserDetailByWxCode(code);
+      if (data.code === "00000") {
+        setLocal("loginUser", JSON.stringify(data.data));
+        console.log('loginUser JSON:',JSON.stringify(data.data));
+        Toast.success(t('login.loginSucess'));
+        setTimeout(() => {
+          router.push("/home");
+        }, 200);
+      } else {
+        Toast.fail(data.message);
+      }
+    };
+
+  },
+  components: {
+    [Button.name]: Button,
+    [Dialog.name]: Dialog
+  },
+};
+</script>
+
+