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来请求接口操作了。

如果有设么问题,欢迎指正~

 

 

Guess you like

Origin blog.csdn.net/qq_39650208/article/details/106434852