'use strict';
const db = uniCloud.database();
const usersCollection = db.collection('tq_users');
exports.main = async (event, context) => {
console.log(event);
const {
code,
userInfo
} = event;
try {
const wxContext = uniCloud.getWXContext();
const openid = wxContext.OPENID;
const unionid = wxContext.UNIONID;
if (!openid) {
return {
code: 500,
message: '获取 openid 失败'
};
}
//查询用户是否已存在
const queryRes = await usersCollection.where({
openid
}).get();
let userData = {
openid,
unionid: unionid || '',
nickName: userInfo.nickName,
avatarUrl: userInfo.avatarUrl,
gender: userInfo.gender,
city: userInfo.city,
province: userInfo.province,
country: userInfo.country,
lastLoginTime: Date.now(),
createTime: queryRes.data.length === 0 ? Date.now() : queryRes.data[0].createTime
};
// 用户不存在则创建,存在则更新
if (queryRes.data.length === 0) {
userData.createTime = Date.now();
const addRes = await usersCollection.add(userData);
userData._id = addRes.id;
} else {
const userId = queryRes.data[0]._id;
await usersCollection.doc(userId).update(userData);
userData._id = userId;
}
return {
code: 200,
message: '登录成功',
data: {
userInfo: userData
}
};
} catch (error) {
console.error('登录错误:', error);
return {
code: 500,
message: '服务器错误: ' + error.message
};
}
};
以上是我的云函数代码,已经检查过appid和appsecret都没有问题,页面端code也是能获取到的,运行是在微信开发者工具中

我也遇到这个问题:
'use strict';
const db = uniCloud.database();
exports.main = async (event, context) => {
const { code, userInfo } = event;
// 调用微信 API 获取 openid 和 session_key
const wxRes = await uniCloud.getWXContext();
const { openid } = wxRes;
// 查询用户是否已注册
const userCollection = db.collection('users');
const user = await userCollection.where({
openid: openid
}).get();
if (user.data.length === 0) {
// 用户未注册,进行注册
await userCollection.add({
openid: openid,
...userInfo,
createTime: Date.now()
});
return {
code: 0,
message: '注册成功'
};
} else {
// 用户已注册
return {
code: 0,
message: '登录成功'
};
}
};
"@dcloudio/uni-cloud": "^3.0.0-4050720250324001",
不知道为什么还会出现这个问题,是不是unicloud的api的问题