Browse Source

TBtools-本地缓存登录手机号

panyong 4 years ago
parent
commit
8e8e959792

+ 5 - 0
htmldev/TBTools/package-lock.json

@@ -3216,6 +3216,11 @@
         "randomfill": "^1.0.3"
       }
     },
+    "crypto-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/crypto-js/download/crypto-js-4.0.0.tgz",
+      "integrity": "sha1-KQSrJnep0EKFai6i74DekuSjbcw="
+    },
     "css-color-names": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",

+ 1 - 0
htmldev/TBTools/package.json

@@ -17,6 +17,7 @@
     "axios": "0.17.1",
     "babel-plugin-component": "0.10.1",
     "babel-polyfill": "6.26.0",
+    "crypto-js": "^4.0.0",
     "element-ui": "2.14.1",
     "file-saver": "^2.0.5",
     "gulp": "3.9.1",

+ 5 - 1
htmldev/TBTools/src/store/modules/user.js

@@ -3,7 +3,8 @@ export default {
   state: {
     id: 0,
     name: '',
-    token: '' // 登录返回的token
+    token: '', // 登录返回的token
+    userPhone: ''
   },
   mutations: {
     updateId (state, id) {
@@ -14,6 +15,9 @@ export default {
     },
     updateToken (state, val) {
       state.token = val
+    },
+    updateUserPhone (state, val) {
+      state.userPhone = val
     }
   }
 }

+ 41 - 0
htmldev/TBTools/src/utils/crypto.js

@@ -0,0 +1,41 @@
+import CryptoJS from 'crypto-js'
+
+const key = CryptoJS.enc.Utf8.parse('1234567890000000') // 16位
+const iv = CryptoJS.enc.Utf8.parse('1234567890000000')
+
+export default {
+  // aes加密
+  encrypt (word) {
+    let encrypted = ''
+    if (typeof word === 'string') {
+      const srcs = CryptoJS.enc.Utf8.parse(word)
+      encrypted = CryptoJS.AES.encrypt(srcs, key, {
+        iv: iv,
+        mode: CryptoJS.mode.CBC,
+        padding: CryptoJS.pad.Pkcs7
+      })
+    } else if (typeof word === 'object') {
+      // 对象格式的转成json字符串
+      const data = JSON.stringify(word)
+      const srcs = CryptoJS.enc.Utf8.parse(data)
+      encrypted = CryptoJS.AES.encrypt(srcs, key, {
+        iv: iv,
+        mode: CryptoJS.mode.CBC,
+        padding: CryptoJS.pad.Pkcs7
+      })
+    }
+    return encrypted.ciphertext.toString()
+  },
+  // aes解密
+  decrypt (word) {
+    const encryptedHexStr = CryptoJS.enc.Hex.parse(word)
+    const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr)
+    const decrypt = CryptoJS.AES.decrypt(srcs, key, {
+      iv: iv,
+      mode: CryptoJS.mode.CBC,
+      padding: CryptoJS.pad.Pkcs7
+    })
+    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
+    return decryptedStr.toString()
+  }
+}

+ 1 - 0
htmldev/TBTools/src/utils/index.js

@@ -53,6 +53,7 @@ export function treeDataTranslate (data, id = 'id', pid = 'parentId') {
  */
 export function clearLoginInfo () {
   Vue.cookie.delete('token')
+  Vue.cookie.delete('userPhone')
   store.commit('resetStore')
   router.options.isAddDynamicMenuRoutes = false
 }

+ 3 - 0
htmldev/TBTools/src/views/modules/account/login.vue

@@ -40,6 +40,7 @@
 
 <script>
 import { getUUID } from '@/utils'
+import Crypto from '@/utils/crypto'
 
 export default {
   data () {
@@ -94,7 +95,9 @@ export default {
               const { token } = data.data
               const { next } = this.$route.query
               this.$store.commit('user/updateToken', token)
+              this.$store.commit('user/updateUserPhone', Crypto.encrypt(userPhone))
               this.$cookie.set('token', token)
+              this.$cookie.set('userPhone', Crypto.encrypt(userPhone))
               if (next) {
                 location.replace(decodeURIComponent(next))
               } else {

+ 10 - 1
htmldev/TBTools/src/views/modules/mine/user.vue

@@ -21,8 +21,17 @@
 </template>
 
 <script>
+import Crypto from '@/utils/crypto'
+import Vue from 'vue'
+
 export default {
-  name: 'user'
+  name: 'user',
+  computed: {
+    userPhone () {
+      const userPhone = this.$store.state.user.userPhone || Vue.cookie.get('userPhone')
+      return Crypto.decrypt(userPhone)
+    }
+  }
 }
 </script>