登录接口又双叕变了,三行代码挑战全网最少修改工作量
发布于 3 年前 作者 isun 3795 次浏览 来自 分享

小程序登录、用户信息样关接口又双叕变了。

https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801

几家悲伤几家愁。。。

微信的一小步,人猿的一大步。。。

没办法,改吧。。。

翻出以前小程序这部分的代码,惊喜地发现,只需要三行代码,就能平滑过渡;

感谢我以前看似丑陋却很省事的登录代码逻辑!!!

登录逻辑如下:

1、判断库里有用户的信息没有,没有,则wx.navigateTo一个专门的授权页面:auth

2、授权成功后获得userInfo,保存到库里;

auth页代码修改如下:

auth.wxml:

修改一行代码

<button style='margin:15px;font-size:16px' type='primary' size="mini" bindtap='getUserProfile'>授权微信头像和昵称</button>


auth.js:

修改两行代码

  //原wx.getUserInfo接口
  getUserInfo: function (e) {
    let userInfo = e.detail.userInfo
    if (userInfo) this.onSaveUserInfo(userInfo)
  },

  //新增wx.getUserProfile接口
  getUserProfile: function (e) {
    wx.getUserProfile({
      desc: '业务需要',
      success: res => this.onSaveUserInfo(res.userInfo)
    })
  },

  //保存userInfo到DB
  onSaveUserInfo:function(userInfo){
    console.log(app.globalData.userInfo = userInfo)
    db.collection('user')
      .where({ _id: this.openid })
      .count()
      .then(res => {
        if (res.total > 0) {
          //doc.update
          db.collection('user').doc(this.openid).update({
            data: userInfo
          }).then(res => console.log(res))
        } else {
          //doc.add
          db.collection('user').doc(this.openid).add({
            data: userInfo
          }).then(res => console.log(res))
        }
      })
    wx.navigateBack()
  },


以下是判断用户信息是否存在的代码:

xxxx.js:

  onSubmit:async function () {
    if (await app.hasUserInfo()) { } else return
    //其他代码
  },


app.js:

  hasUserInfo: async function () {
    if (this.globalData.userInfo && this.globalData.userInfo.nickName && this.globalData.userInfo.avatarUrl) return true
    let res = await wx.cloud.database().collection('user').doc(this.openid).get().catch(err => console.log(err))
    if (res && res.data && res.data.nickName && res.data.avatarUrl) {
      this.globalData.userInfo = res.data
      return true
    } else {
      wx.navigateTo({ url: '/base/auth/auth' })
      return false
    }
  },


至于用户更换了头像昵称后怎么更新数据库,我们一直以来的方法如下:

1、留给用户手动授权的入口,用户更换头像后,发现自己的头像不显示,则需要手动授权刷新userInfo;

2、一般会在这个页面:我的--个人信息--授权微信头像和昵称,用户点击后,wx.navigateTo到授权页。


接下来就是重复工作了,给每个小程序复制替换以上代码,不到半小时,所有小程序改完。。。

8 回复

你好,请问这样的话怎么判断用户是否第一次登录,因为原本的wx.getSetting接口听说不能用了,那么怎么判断用户是否登录了呢

很想要你的api库,学习一下!

我想问问在拿到了openid后做了全局保存了,但再重新编译后就无法获取到全局的openid了,是为什么?



过来给你点赞

那用户更新信息了呢?怎么判断

想问下你们前端是怎么把图片传给后端保存的,直接传头像url么?这样会有安全性问题,比如是一个非法url或者内部接口url,后端在下载头像的时候会调用这个url,能直接传图片流么?

用户更换头像和昵称后也没办法感知,这样的代码岂不是一直拿到的老的昵称和头像?

随心所欲,为所欲为。 ^_^

回到顶部