从0开始小程序云开发-实现指定用户小程序端操作云数据库,云存储

需求:指定的用户可以操作云数据库,云存储。

思路:由于无法直接权限里设置,而云函数具有所有权限,所以通过前端调用云函数,在云函数中鉴权,操作数据库,存储。
在云数据库中设置一个admin集合,存放指定的用户的openid,用户访问云函数时,先获取访问用户的openid,判断是否在admin中,再执行增删改操作。

从0开始小程序云开发-实现指定用户小程序端操作云数据库,云存储_第1张图片
从0开始小程序云开发-实现指定用户小程序端操作云数据库,云存储_第2张图片
具体代码如下

// 云函数入口文件
const cloud = require('wx-server-sdk')  

// 初始化 cloud
cloud.init({
  //   API 调用都保持和云函数当前所在环境一致
  env: 'duziea-oqzab'
})
const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  let openid = wxContext.OPENID
  const res = await db.collection('admin').doc('admin').get()
  const admin_openidlist = res['data']['admin_openidlist']
  
  if (admin_openidlist.includes(openid)){
    //操作云数据库或云存储
  }
  else{
    return '你没有权限'
  }
}

突然想到可以写一个独立的鉴权云函数,在需要鉴权的云函数数中调用,看起来更方便些。

## 通过云函数存储图片或文件
这里需要用到
FileSystemManager.readFile(Object object)
读取本地文件内容,将内容指定编码后传给云函数,云函数调用
uploadfile

这里我在chooseimage时,调用FileSystemManager.readFile,将每张图片的base64存入一个Array,提交时将这个Array提交,在云函数中调用uploadfile将图片存入云存储,将返回的cloudfileID存入数据库
在开发者工具中运行正常,然而在真机调试时,当图片超过4张时,经常timeout。

于是修改成,在chooseimage时,对每张图片调用FileSystemManager.readFile获取base64,调用云函数saveimg将base64存入云存储,返回cloudfileID,小程序端将cloudfileID存入array,提交时,将cloudfileID提交给云函数savedb。解决了之前的问题,但也有新的问题,当选择完图片后,某种原因导致用户退出了小程序,此时图片已存入云存储,而cloudfileID未存入数据库。该为之奈何

大家有好的解决方案可以留言。

你可能感兴趣的:(小程序)