官方API 链接
官方解释
云开发支持跨账号环境(资源)共享,即一个小程序的云开发资源可以授权共享给同主体下其他小程序 / 公众号使用。
需求
已知两个或多个小程序,A,B...
B需要访问A的云数据库进行操作,其他类似
A端(资源方)操作
创建一个云函数,名为 cloudbase_auth,将以下代码写入,同步
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
console.log(event)
console.log(wxContext)
// 跨账号调用时,由此拿到来源方小程序/公众号 AppID
console.log(wxContext.FROM_APPID)
// 跨账号调用时,由此拿到来源方小程序/公众号的用户 OpenID
console.log(wxContext.FROM_OPENID)
// 跨账号调用、且满足 unionid 获取条件时,由此拿到同主体下的用户 UnionID
console.log(wxContext.FROM_UNIONID)
return {
errCode: 0,
errMsg: '',
auth: JSON.stringify({
// 自定义安全规则
// 在前端访问资源方数据库、云函数等资源时,资源方可以通过
// 安全规则的 `auth.custom` 字段获取此对象的内容做校验,
// 像这个示例就是资源方可以在安全规则中通过 `auth.custom.x` 获取
//x: 1,
}),
}
}
B端(需求方)操作
创建一个云函数,用于请求A方资源,例如叫GetADB
将以下代码写入GetADB保存后同步,注意修改自己的配置信息
// 云函数入口文件
const cloud = require('wx-server-sdk')
// 云函数入口函数
exports.main = async (event, context) => {
// 声明新的 cloud 实例
var c1 = new cloud.Cloud({
// 资源方 AppID
resourceAppid: '修改为A的AppID',
// 资源方环境 ID
resourceEnv: '修改为A的环境ID',
})
// 跨账号调用,必须等待 init 完成
// init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则
await c1.init()
// 完成后正常使用资源方的已授权的云资源
return new Promise(async (resolve, reject) => {
//多数报错504002什么的,都是没写下面这段代码,或者查询的数据库不存在导致
const db = c1.database()
await db.collection('数据库名称').limit(1000)
//查询条件
.field({
id: true
})
.get()
.then(res => {
console.log('获取-A数据库-成功',res)
resolve(res.data)
})
.catch(err => {
console.log('获取-A数据库-失败',err)
reject(err)
})
})
}
测试请求
在小程序B调用自己的云函数GetADB
async GetADB(){
await wx.cloud.callFunction({
name:'GetADB'
})
.then(res=>{
console.log(res);
})
.catch(err=>{
console.log(err);
})
}
处理后的返回结果
时间若流水,恍惚间逝去