Browse Source

非生产环境下自动登录

Michael Wang 7 years ago
parent
commit
2668253a57
4 changed files with 42 additions and 19 deletions
  1. 0 14
      src/features/OnlineExam/OnlineExamHome.vue
  2. 1 0
      src/features/login/Login.vue
  3. 28 0
      src/main.js
  4. 13 5
      src/utils/axios.js

+ 0 - 14
src/features/OnlineExam/OnlineExamHome.vue

@@ -35,21 +35,7 @@ export default {
     };
   },
   async mounted() {
-    this.$http.defaults.headers.post["Content-Type"] = "application/json";
-    if (!this.$http.defaults.headers.common["token"]) {
-      // let that = this;
-      const response = await this.$http.post("/api/ecs_core/auth/login", {
-        domain: process.env.VUE_APP_LOGIN_DOMAIN,
-        accountValue: process.env.VUE_APP_LOGIN_ACCOUNT_VALUE,
-        password: process.env.VUE_APP_LOGIN_PASSWORD,
-        accountType: process.env.VUE_APP_LOGIN_ACCOUNTTYPE
-      });
-      this.$http.defaults.headers.common["token"] = response.data.token;
-      this.$http.defaults.headers.common["key"] = response.data.key;
-    }
-
     const res = await this.$http.get("/api/online_exam_course");
-    // console.log(res);
 
     this.courses = res.data.map(c => ({
       courseName: c.courseName,

+ 1 - 0
src/features/login/Login.vue

@@ -91,6 +91,7 @@ export default {
       const response = await this.$http.post("/api/ecs_core/auth/login", {
         ...repPara,
         accountType: this.loginType,
+        // FIXME: 根据域名来确定domain
         domain: process.env.VUE_APP_LOGIN_DOMAIN
       });
       let data = response.data;

+ 28 - 0
src/main.js

@@ -20,3 +20,31 @@ new Vue({
   store,
   render: h => h(App)
 }).$mount("#app");
+
+if (process.env.NODE_ENV === "development") {
+  console.log("非生产环境,自动登录");
+  (async () => {
+    if (window.localStorage.getItem("token")) {
+      return;
+    }
+    const response = await fetch("/api/ecs_core/auth/login", {
+      method: "POST",
+      headers: {
+        "Content-Type": "application/json;charset=UTF-8"
+      },
+      body: JSON.stringify({
+        domain: process.env.VUE_APP_LOGIN_DOMAIN,
+        accountValue: process.env.VUE_APP_LOGIN_ACCOUNT_VALUE,
+        password: process.env.VUE_APP_LOGIN_PASSWORD,
+        accountType: process.env.VUE_APP_LOGIN_ACCOUNTTYPE
+      })
+    });
+    let data = await response.json();
+    if (data.token) {
+      window.localStorage.setItem("token", data.token);
+      window.localStorage.setItem("key", data.key);
+    } else {
+      console.log(data.desc);
+    }
+  })();
+}

+ 13 - 5
src/utils/axios.js

@@ -5,13 +5,20 @@ import router from "../router";
 //axios配置 start
 
 //请求拦截
+
+let wk_token, wk_key;
 Axios.interceptors.request.use(
   config => {
-    if (window.localStorage.getItem("token")) {
-      Axios.defaults.headers.common["token"] = window.localStorage.getItem(
-        "token"
-      );
-      Axios.defaults.headers.common["key"] = window.localStorage.getItem("key");
+    if (config.url.includes("/login") === false) {
+      if (!wk_token) {
+        wk_token = window.localStorage.getItem("token");
+        wk_key = window.localStorage.getItem("key");
+      }
+      if (wk_token && config.headers.common["token"] == null) {
+        config.headers.common["token"] = wk_token;
+        // Axios.defaults.headers.common["key"] = window.localStorage.getItem("key");
+        config.headers.common["key"] = wk_key;
+      }
     }
 
     return config;
@@ -47,6 +54,7 @@ Axios.interceptors.response.use(
     }
     // 登录失效 跳转登录页面
     if (status == 403 || status == 401) {
+      wk_token = null;
       router.push({
         name: "login"
       });