// 云函数入口文件
const cloud = require('wx-server-sdk')
const axios = require('axios')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 这里最好用云函数环境变量存储 APPID 和 APPSECRET
const APPID = '
const APPSECRET = ''
exports.main = async (event, context) => {
const { code, userInfo } = event
if (!code) {
return { code: 400, message: '缺少 code 参数' }
}
try {
// 调用微信 jscode2session 接口
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${APPSECRET}&js_code=${code}&grant_type=authorization_code`
const res = await axios.get(url)
const data = res.data
if (data.errcode) {
return { code: 400, message: data.errmsg || '调用微信接口失败', wxErr: data }
}
const openid = data.openid
const session_key = data.session_key
// 生成 token(这里简单示例,用时间戳)
const token = 'token_' + Date.now() + '_' + Math.random().toString(36).substr(2, 8)
// 这里可以把 token, openid, userInfo 存入数据库(可选)
const db = cloud.database()
const users = db.collection('users')
// 查找用户是否存在
const userRecord = await users.where({ openid }).get()
if (userRecord.data.length === 0) {
// 新用户,插入
await users.add({
data: {
openid,
nickName: userInfo.nickName ,
avatarUrl: userInfo.avatarUrl ,
createTime: new Date()
}
})
} else {
// 已存在用户,可更新信息
await users.doc(userRecord.data[0]._id).update({
data: {
nickName: userInfo.nickName || userRecord.data[0].nickName,
avatarUrl: userInfo.avatarUrl || userRecord.data[0].avatarUrl,
updateTime: new Date()
}
})
}
return {
code: 200,
message: '登录成功',
data: {
token,
userInfo: {
nickName: userInfo.nickName,
avatarUrl: userInfo.avatarUrl,
userId: openid
}
}
}
} catch (err) {
console.error('wxlogin 云函数出错:', err)
return { code: 500, message: '服务器异常', error: err }
}
}
这个是我的云函数,我真机测试,每次授权访问都是只显示的微信用户,不显示该账号真实的昵称和头像,这是正常的吗,我不知道哪里有问题

云开发可以免鉴权获取用户的openid,无需再去调接口
有云函数,为什么还需要获取登录code?
云函数里,不是能直接拿到了用户的openid吗?