同一个微信号,用不同的邮箱申请了两个小程序,现在想让这两个小程序的云数据库互通
1.但是同一用户访问这两个小程序的openid不一样,查了一通,说这种情况下的unionid是一样的,但用"login"返回的unionid是空的
- event:
- userInfo: {appId: "xxx", openId: "xxx"}
- __proto__: Object
- openid:"xxx"
- unionid: ""
请问改如何获取unionid,或者这种情况下有没办法让同一用户的两个小程序openid相同或者互相绑定
2.用如下代码实现了两个小程序的数据库互通,但由于openid不同,却无法实现数据互通
1. A端(资源方)操作
创建一个云函数,名为 cloudbase_auth,将以下代码写入,同步
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV 4
})
//云函数入口函数
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` 获取
})
}
}
2. B端(需求方)操作
创建一个云函数,用于请求A方资源,例如叫GetADB
将以下代码写入GetADB保存后同步,注意修改自己的配置信息
// 云函数入口文件
const cloud = require('wx-server-sdk')
// 云函数入口函数
exports.main = async (event, context) => {
// 声明新的 cloud 实例
var c1 = new cloud.Cloud({
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: true29
}).get()
.then(res => {
console.log('获取-A数据库-成功',res)
resolve(res.data)
}).catch(err => {
console.log('获取-A数据库-失败',err)
reject(err)
})
})
}