// manifest.json 微信配置 "mp-weixin": { "appid": "wx1234567890", "cloud": true, // 开启云开发 "requiredPrivateInfos": ["login"] } // uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json { "passwordSecret": "your-secret-key", "mp-weixin": { "appid": "wx1234567890", "appsecret": "your-app-secret" } }
创建 uni-id-users
集合结构:
{ "bsonType": "object", "required": ["wx_openid"], "properties": { "wx_openid": {"bsonType": "string"}, "wx_unionid": {"bsonType": "string"}, "session_key": {"bsonType": "string"}, "last_login": {"bsonType": "timestamp"} } }
// utils/auth.js export default { async silentLogin() { try { // 获取微信code const { code } = await uni.login({ provider: 'weixin' }) // 调用云函数 const { result } = await uniCloud.callFunction({ name: 'uni-id-co', data: { action: 'loginByWeixin', params: { code } } }) // 存储登录态 uni.setStorageSync('uni_id_token', result.token) uni.setStorageSync('uni_id_token_expired', result.tokenExpired) return result } catch (e) { console.error('登录失败:', e) throw e } } }
// uniCloud/cloudfunctions/uni-id-co/index.js const uniID = require('uni-id-common') exports.main = async (event) => { const uniIDIns = uniID.createInstance({ context: event.context }) switch (event.action) { case 'loginByWeixin': const { code } = event.params const { uid, userInfo, token, tokenExpired } = await uniIDIns.loginByWeixin({ code, needUserInfo: false // 静默模式不获取用户信息 }) // 更新最后登录时间 await db.collection('uni-id-users').doc(uid).update({ last_login: Date.now() }) return { uid, token, tokenExpired } } }