评论

云开发-如何维护用户表?

不可缺少的用户表,维护如此简单

需求分析

需求:维护用户表,用于个人中心、排行、点赞、评论、等功能都需要用到。

实现思路:

  1. 通过 login 云函数获取 openid 存放到本地
  2. 在授权信息的时候去添加 userInfo
  3. 根据 openid 去查询是否已经存储
  4. 没有查到就是新用户进行添加并存放 id 到本地
  5. 查看后老用户就根据 id 进行更新信息

代码实现

获取opneid云函数

login:

/**
 * 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端
 * 
 * event 参数包含小程序端调用传入的 data
 * 
 */
exports.main = (event, context) => {
  console.log(event)
  console.log(context)

  // 可执行其他自定义逻辑
  // console.log 的内容可以在云开发云函数调用日志查看

  // 获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

客户端调用login函数存放opneid到本地

 wx.cloud.callFunction({
      name: 'login',
    }).then(res => {
      wx.setStorageSync('openid', res.result.openid)
    })

授权信息操作

      db.collection('users').where({
            _openid: wx.getStorageSync('openid') // 填入当前用户 openid
          }).get().then(res => {
            if (!res.data.length) {
              // 新用户
              db.collection('users').add({
                data: {
                  userInfo: e.detail.userInfo
                }
              }).then(res => {
                wx.setStorageSync('id', res._id)
              })

            } else {
              // 老用户
              db.collection('users').doc(wx.getStorageSync('id')).update({
                data: {
                  userInfo: e.detail.userInfo
                }
              }).then(console.log)
            }
          })

总结

用户表可以说是最重要的一张表,在这里主要就是注意一定要去重,所以我们在 add 之前还去查询是否是新用户的判断。当然这个逻辑代码可以写在客户端同样也可以写成云函数。


如有收获,记得点赞、收藏
如有疑问,欢迎进行留言讨论

最后一次编辑于  2020-08-17  
点赞 2
收藏
评论

2 个评论

  • 老张
    老张
    2020-08-17

    我一般是_id=openid

    2020-08-17
    赞同 2
    回复 3
    • 陈宇明
      陈宇明
      2020-08-17
      这样当然是最好的,但是云数据库的_id不是自动生产的吗?可以自己控制吗?
      2020-08-17
      回复
    • 老张
      老张
      2020-08-17回复陈宇明
      哪家数据库的_id都是可以自定义的。
      2020-08-17
      回复
    • 陈宇明
      陈宇明
      2020-08-17回复老张
      多谢指点,我刚翻阅了文档,是我没有看仔细,不传就自动生产。


      官方描述:新增记录,如果传入的记录对象没有 _id 字段,则由后台自动生成 _id;若指定了 _id,则不能与已有记录冲突
      2020-08-17
      1
      回复
  • admin
    admin
    2020-08-17

    为什么要保存在本地,直接保存在数据库不好吗

    2020-08-17
    赞同
    回复 1
    • 陈宇明
      陈宇明
      2020-08-18
      本地是id,信息是数据库
      2020-08-18
      回复
登录 后发表内容