微信小程序index.js无法获取openid。

2018-08-18  本文已影响169人  ChasenGao

该文章解决方案源于网络,我进行了微加工。
该文章适合解决:app.js获取和了openid后,重新编译小程序,index.js在获取openid之前就已经加载成功,导致index.js无法获取到app.js中的openid问题。

解决方法有两步:
第一步、添加一个引导页。
第二步、使用Promise

代码如下:
app.js中添加方法如下:

getToken() {
    return new Promise((resolve, reject) => {
      // 登录
      wx.login({
        success: res => {
          // 发送 res.code 到后台换取 openId, sessionKey, unionId
          if (res.code) {
            //发送res.code 到后台
            wx.request({
              url: this.globalApi.checkUser,
              method: 'POST',
              data: {
                code: res.code
              },
              success(res) {
                //成功返回数据后,将token值存储到localStorage中
                wx.setStorage({
                  key: 'yerlLocalToken',
                  data: res.data.token
                });
                var resArg = res.data.token;
                resolve(resArg)
              },
              fail() {
                reject();
              }
            })
          }
        }
      })
    })
  }

加了个引导页load.js如下

onLoad: function (options) {
    app.getToken().then(function (resArg) {
      wx.redirectTo({
        url: '/pages/index/index',
      })
    })
  }

这里和上页的resArg可以删除。
promise执行成功后,页面跳转到首页

index.js

const app = getApp()
Page({
  data: {
    
  },
  onLoad() {
   console.log(wx.getStorageSync('yerlLocalToken'))
  }
})

显示结果如下:


正常获取到token。
如果按照这种方法解决该问题,请记得将app.json中的页面顺序调整为load页面首位,如下:

{
  "pages": [
    "pages/load/load",
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "wechat",
    "navigationBarTextStyle": "black"
  }
}
上一篇 下一篇

猜你喜欢

热点阅读