vue 微信公衆號存入localStorage裏面openid,取出來爲空或者沒有,

最近做項目是,因爲某些原因修改了域名,之前域名是http開頭的,後來改成了https,接着就發生了一系列問題,首先簡單的是請求接口鏈接變了,換了一撥;後續突然出現用戶信息爲空了(請求用戶信息的接口沒有返回信息),一些列排查以後,才發現是因爲請求用戶信息接口時,openid爲null或者undefined,或者用了其他公衆號的openid,以至於接口報錯。

但是讓其他用戶有的測,發現有的用戶是這樣的問題,有的沒有問題,最後定位到是ios系統存在這樣的問題。

然後就順着openid的線索一步步聯調,發現剛進入項目用戶授權拿到了用戶的openid,並存入localStorage裏面,但是後續的頁面中從localstorage中拿出來的openid是null,很費解,這個原因至今還沒查清到底是爲什麼,不過在網上查到一些方法,就是將獲取到的openid存入cookie裏面,然後再拿出來,這樣測試的結果對了,但是有個問題是cookie大小以及時間有限,所以還在想其他辦法,等找到再繼續分享給大家。

採用cookie存的方法如下:

1、首先在vue項目index.html頁面script標籤裏面將拿到的openid,存入cookie,代碼如下:

if (location.href.split('openid').length === 2) { // 這個是後臺給的授權鏈接,點擊可以獲取到一個鏈接,然後截取裏面的openid
          const arr = location.href.split(/[\?\&]/)
          const obj = {}
          arr.map(item => {
            if (item.indexOf('=') !== -1) {
              obj[item.split('=')[0]] = item.split('=')[1]
            } else {
              obj.baseUrl = item
            }
          })
          document.cookie = 'openid=' + obj.openid + '; path=/' // path設置是爲了讓所有頁面都可以拿到cookie
          // const openidall = document.cookie // 這裏可以拿到cookie
          // alert('cookeie:' + openidall)
          localStorage.setItem('openid', obj.openid) // 也將openid存入localStorage裏面一份,因爲安卓手機還是可以的
          if (location.hash === '') {
            location.href = location.origin + location.pathname + '/#/home'
          }
        }

2、在App.vue頁面將cookie裏面的openid拿出來,放到vuex狀態管理器裏面,這樣整個項目都可以從vuex裏面拿openid啦(這個具體情況具體來,可以不放vuex)

 mounted () {
      if (localStorage.openid !== '') { // 這個情況適用於安卓手機,可以用localStorage裏面的openid
        this.$store.commit('SET_OPENID', localStorage.openid)
      }
      if (document.cookie.split(';')[0].split('=')[1] !== '') { // 這裏是適用於ios系統的,可以這樣取openid,放入store裏面
        // alert('openid;' + document.cookie.split(';')[0].split('='))
        this.$store.commit('SET_OPENID', document.cookie.split(';')[0].split('=')[1])
      }
    },

這樣就可以從vuex裏面拿到openid了,就可以像之前一樣用openid來請求接口操作了。

如果有設麼問題,歡迎指正~

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章