浏览代码

添加商城登录功能,暂无法切换账套

huxz 8 年之前
父节点
当前提交
7ef35c3d6a
共有 11 个文件被更改,包括 128 次插入8 次删除
  1. 8 4
      components/default/Header.vue
  2. 3 2
      middleware/check-auth.js
  3. 3 0
      nuxt.config.js
  4. 1 0
      package.json
  5. 56 0
      pages/auth/login.vue
  6. 34 0
      pages/auth/logout.vue
  7. 3 0
      plugins/axios.js
  8. 4 0
      plugins/jsonp.js
  9. 4 1
      store/index.js
  10. 5 0
      store/option.js
  11. 7 1
      yarn.lock

+ 8 - 4
components/default/Header.vue

@@ -65,12 +65,13 @@
     },
     },
     methods: {
     methods: {
       logout () {
       logout () {
-        this.$store.dispatch('logout')
+        this.$router.push('/auth/logout')
       },
       },
       onLoginClick () {
       onLoginClick () {
         this.$http.get('/login/page').then(response => {
         this.$http.get('/login/page').then(response => {
-          // 跳转登录
-          window.location.href = response.data.content
+          if (response.data) {
+            this.$router.push('/auth/login')
+          }
         })
         })
         // TODO 待Account Center改版
         // TODO 待Account Center改版
       },
       },
@@ -80,10 +81,13 @@
       // 切换当前企业
       // 切换当前企业
       switchEnterprise (en) {
       switchEnterprise (en) {
         this.toggleEnterprises()
         this.toggleEnterprises()
-        this.$http.get(`authentication/${en.enUU}`).then(() => {
+        this.$http.get(`/user/authentication/${en.uu}`).then(() => {
           this.$store.dispatch('loadUserInfo')
           this.$store.dispatch('loadUserInfo')
         })
         })
       }
       }
+    },
+    beforeMount () {
+      // this.$store.dispatch('loadUserInfo')
     }
     }
   }
   }
 </script>
 </script>

+ 3 - 2
middleware/check-auth.js

@@ -6,7 +6,8 @@ export default function ({ isServer, store, req }) {
   if (isServer) {
   if (isServer) {
     store.dispatch('loadUserInfo')
     store.dispatch('loadUserInfo')
   } else {
   } else {
-    const loggedUser = getAuthInfo()
-    store.commit('option/REQUEST_USER_INFO_SUCCESS', loggedUser)
+    getAuthInfo()
+    // const loggedUser = getAuthInfo()
+    // store.commit('option/REQUEST_USER_INFO_SUCCESS', loggedUser)
   }
   }
 }
 }

+ 3 - 0
nuxt.config.js

@@ -98,6 +98,9 @@ module.exports = {
   }, {
   }, {
     src: '~plugins/filters.js',
     src: '~plugins/filters.js',
     ssr: false
     ssr: false
+  }, {
+    src: '~plugins/jsonp.js',
+    ssr: false
   }],
   }],
   proxyTable: ['/api/**', '/search/**', '/user/**', '/login/**', '/logout/**']
   proxyTable: ['/api/**', '/search/**', '/user/**', '/login/**', '/logout/**']
 }
 }

+ 1 - 0
package.json

@@ -14,6 +14,7 @@
     "font-awesome": "^4.7.0",
     "font-awesome": "^4.7.0",
     "http-proxy-middleware": "^0.17.4",
     "http-proxy-middleware": "^0.17.4",
     "iview": "^2.0.0-rc.19",
     "iview": "^2.0.0-rc.19",
+    "jsonp": "^0.2.1",
     "nuxt": "0.10.6",
     "nuxt": "0.10.6",
     "vue-awesome-swiper": "^2.5.4",
     "vue-awesome-swiper": "^2.5.4",
     "vue2-filters": "^0.1.9"
     "vue2-filters": "^0.1.9"

+ 56 - 0
pages/auth/login.vue

@@ -0,0 +1,56 @@
+<template>
+  <!-- Login 代理页面 -->
+  <div>
+    <h1>Login 代理页面</h1>
+  </div>
+</template>
+<script>
+
+export default {
+  mounted () {
+    this.crossBefore()
+  },
+  methods: {
+    async crossBefore () {
+      try {
+        let { data } = await this.$http.get('/login/crossBefore')
+        const params = data || {}
+        this.proxyLogin(params.askUrl, params.askData, params.loginUrl)
+      } catch (err) {
+        this.$router.replace('/')
+        console.log(err)
+      }
+    },
+    proxyLogin (askUrl, askData, loginUrl) {
+      const crossAfter = this.crossAfter
+      this.$jsonp(`${askUrl}?askData=${askData}`, function (err, data) {
+        if (err) throw err
+
+        // 判断是否已经登录
+        if (data.error) {
+          // 如果未登录,跳转登录界面
+          window.location.href = loginUrl
+        } else {
+          crossAfter(data.content)
+        }
+      })
+    },
+    async crossAfter (content) {
+      if (!content && content === '') {
+        this.$router.replace('/')
+      }
+
+      try {
+        let { data } = await this.$http.post('/login/crossAfter', {}, { params: { replyTxt: content } })
+
+        this.$store.dispatch('loadUserInfo', data)
+
+        window.location.href = data.returnUrl || '/'
+      } catch (err) {
+        this.$router.replace('/')
+        console.log(err)
+      }
+    }
+  }
+}
+</script>

+ 34 - 0
pages/auth/logout.vue

@@ -0,0 +1,34 @@
+<template>
+  <!-- Login 代理页面 -->
+  <div>
+    <h1>Login 代理页面</h1>
+  </div>
+</template>
+<script>
+
+export default {
+  mounted () {
+    this.crossBefore()
+  },
+  methods: {
+    async crossBefore () {
+      try {
+        let { data } = await this.$http.get('/logout/crossBefore')
+        const params = data || {}
+        this.proxyLogout(params.askUrl, params.returnUrl)
+      } catch (err) {
+        this.$router.replace('/')
+        console.log(err)
+      }
+    },
+    proxyLogout (askUrl, returnUrl) {
+      this.$jsonp(`${askUrl}`, function (err, data) {
+        if (err) throw err
+        console.log(data)
+
+        window.location.href = returnUrl && returnUrl !== 'null' ? returnUrl : '/'
+      })
+    }
+  }
+}
+</script>

+ 3 - 0
plugins/axios.js

@@ -1,5 +1,6 @@
 import Vue from 'vue'
 import Vue from 'vue'
 import axios from 'axios'
 import axios from 'axios'
+import store from '~store'
 
 
 const service = axios.create({
 const service = axios.create({
   baseURL: process.env.proxyUrl || process.env.baseUrl
   baseURL: process.env.proxyUrl || process.env.baseUrl
@@ -9,6 +10,8 @@ service.interceptors.request.use(config => {
   // is server render, use ${baseUrl} directly rather than ${proxyUrl}
   // is server render, use ${baseUrl} directly rather than ${proxyUrl}
   if (process.env.proxyUrl && typeof window === 'undefined') {
   if (process.env.proxyUrl && typeof window === 'undefined') {
     config.url = process.env.baseUrl + config.url
     config.url = process.env.baseUrl + config.url
+    config.headers.cookie = store.state.option.cookies
+    config.headers['User-Agent'] = store.state.option.userAgent
   }
   }
   return config
   return config
 }, error => {
 }, error => {

+ 4 - 0
plugins/jsonp.js

@@ -0,0 +1,4 @@
+import jsonp from 'jsonp'
+import Vue from 'vue'
+
+Vue.prototype.$jsonp = jsonp

+ 4 - 1
store/index.js

@@ -29,11 +29,14 @@ export const actions = {
     // 检查设备类型
     // 检查设备类型
     const userAgent = isServer ? req.headers['user-agent'] : navigator.userAgent
     const userAgent = isServer ? req.headers['user-agent'] : navigator.userAgent
     const isMobile = /(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)/ig.test(userAgent)
     const isMobile = /(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)/ig.test(userAgent)
+
+    const cookie = isServer ? req.headers['cookie'] : null
     store.commit('option/SET_MOBILE_LAYOUT', isMobile)
     store.commit('option/SET_MOBILE_LAYOUT', isMobile)
     store.commit('option/SET_USER_AGENT', userAgent)
     store.commit('option/SET_USER_AGENT', userAgent)
+    store.commit('option/SET_COOKIES', cookie)
     return Promise.all([
     return Promise.all([
       // 全局数据
       // 全局数据
-      // store.dispatch('loadUserInfo')
+      store.dispatch('loadUserInfo')
     ])
     ])
   },
   },
   // 获取用户信息
   // 获取用户信息

+ 5 - 0
store/option.js

@@ -5,6 +5,8 @@ export const state = {
   userAgent: '',
   userAgent: '',
   // 是否移动端
   // 是否移动端
   isMobile: false,
   isMobile: false,
+  // 身份token
+  cookies: '',
   // 用户信息
   // 用户信息
   user: {
   user: {
     // 是否登录
     // 是否登录
@@ -26,6 +28,9 @@ export const mutations = {
   SET_MOBILE_LAYOUT (state, result) {
   SET_MOBILE_LAYOUT (state, result) {
     state.isMobile = result
     state.isMobile = result
   },
   },
+  SET_COOKIES (state, result) {
+    state.cookies = result || ''
+  },
   REQUEST_USER_INFO (state) {
   REQUEST_USER_INFO (state) {
     state.user.fetching = true
     state.user.fetching = true
   },
   },

+ 7 - 1
yarn.lock

@@ -1549,7 +1549,7 @@ debug@2.6.7:
   dependencies:
   dependencies:
     ms "2.0.0"
     ms "2.0.0"
 
 
-debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8:
+debug@2.6.8, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8:
   version "2.6.8"
   version "2.6.8"
   resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
   resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
   dependencies:
   dependencies:
@@ -2881,6 +2881,12 @@ jsonify@~0.0.0:
   version "0.0.0"
   version "0.0.0"
   resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
   resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
 
 
+jsonp@^0.2.1:
+  version "0.2.1"
+  resolved "http://registry.npm.taobao.org/jsonp/download/jsonp-0.2.1.tgz#a65b4fa0f10bda719a05441ea7b94c55f3e15bae"
+  dependencies:
+    debug "^2.1.3"
+
 jsonpointer@^4.0.0:
 jsonpointer@^4.0.0:
   version "4.0.1"
   version "4.0.1"
   resolved "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
   resolved "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"