云开发-如何维护用户表?
发布于 4 年前 作者 guiying43 1498 次浏览 来自 分享

需求分析

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

实现思路:

  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 之前还去查询是否是新用户的判断。当然这个逻辑代码可以写在客户端同样也可以写成云函数。


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

2 回复

我一般是_id=openid

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

回到顶部