Browse Source

fix: auth内容修改(todo)

ChenYangfan 6 years ago
parent
commit
0a5fa016a6
3 changed files with 44 additions and 20 deletions
  1. 18 18
      src/App.vue
  2. 5 1
      src/router/main.js
  3. 21 1
      src/views/login/ToRoleHomePage.vue

+ 18 - 18
src/App.vue

@@ -29,24 +29,16 @@ export default {
       token: state => state.main.token
       token: state => state.main.token
     })
     })
   },
   },
-  watch: {
-    $route: {
-      handler (newValue) {
-        const token = newValue.query['id_token']
-        if (token && token !== this.token) {
-          localStorage.setItem('token', token)
-          this.$store.commit(SET_TOKEN, { token })
-          this.fetchUserInfo()
-        }
-      },
-      immediate: true
-    }
-  },
   created () {
   created () {
     // 为每个请求添加Auth字段
     // 为每个请求添加Auth字段
     this.$axios.interceptors.request.use(config => {
     this.$axios.interceptors.request.use(config => {
-      config.headers['Authorization'] = this.token
+      config.headers = {
+        'Authorization': this.token,
+        ...(config.headers ?? {})
+      }
       return config
       return config
+    }, error => {
+      return Promise.reject(error)
     })
     })
 
 
     // 拦截 401 - 无登录信息 前往登录界面
     // 拦截 401 - 无登录信息 前往登录界面
@@ -81,19 +73,27 @@ export default {
     })
     })
   },
   },
   mounted () {
   mounted () {
-    // 获取用户信息
-    this.fetchUserInfo()
+    const handler = () => {
+      const token = this.$route.query['id_token']
+      if (token) {
+        localStorage.setItem('token', token)
+        this.$store.commit(SET_TOKEN, { token })
+        this.fetchUserInfo()
+      }
+    }
+    handler()
+    this.$watch('$route.query', handler)
   },
   },
   methods: {
   methods: {
     fetchUserInfo () {
     fetchUserInfo () {
-      getUserInfo().then(res => {
+      return getUserInfo().then(res => {
         this.$store.commit(SET_USER_INFO, { userInfo: res })
         this.$store.commit(SET_USER_INFO, { userInfo: res })
         if (res.role === userType.student) {
         if (res.role === userType.student) {
           this.$router.push({ name: 'student-explore' })
           this.$router.push({ name: 'student-explore' })
         } else {
         } else {
           this.$router.push({ name: 'teacher-explore' })
           this.$router.push({ name: 'teacher-explore' })
         }
         }
-      }).catch(err => this.$setErrorMessage(err.response.data.msg))
+      })
     }
     }
   }
   }
 }
 }

+ 5 - 1
src/router/main.js

@@ -16,4 +16,8 @@
 //   component: () => import(/* webpackChunkName: "main" */ '@/views/forget-password/ForgetPassword.vue')
 //   component: () => import(/* webpackChunkName: "main" */ '@/views/forget-password/ForgetPassword.vue')
 // }]
 // }]
 
 
-export default []
+export default [{
+  path: '/role',
+  name: 'role',
+  component: () => import(/* webpackChunkName: "main" */ '@/views/login/ToRoleHomePage.vue')
+}]

+ 21 - 1
src/views/login/ToRoleHomePage.vue

@@ -5,7 +5,27 @@
 </template>
 </template>
 
 
 <script>
 <script>
-export default {}
+import { mapState } from 'vuex'
+import userType from '@/enums/user-type'
+
+export default {
+  computed: {
+    ...mapState({
+      userInfo: state => state.main.userInfo
+    })
+  },
+  watch: {
+    userInfo: {
+      handler() {
+        if (this.userInfo.role === userType.student) {
+          this.$router.push({ name: 'student-explore' })
+        } else {
+          this.$router.push({ name: 'teacher-explore' })
+        }
+      }
+    }
+  }
+}
 </script>
 </script>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>