存储额外的用户信息
系统用户表 vs 自定义用户表
使用云开发登录认证后,用户的基础信息(如 uid、登录方式、基础资料等)会自动存储在系统维护的用户表中。如果需要存储业务相关的额外用户信息(如地址、邮箱、会员等级等),推荐创建自定义用户表。
系统用户表:
- 由云开发自动维护
- 存储用户身份认证相关信息(
uid、name、gender、登录方式等) - 通过
auth.currentUser获取 - 不建议直接在此表添加业务字段
自定义用户表(推荐):
- 开发者自行创建和维护(如
users集合) - 存储业务相关的扩展信息(地址、邮箱、积分、会员等级等)
- 通过
uid与系统用户表关联 - 灵活扩展字段,满足业务需求
实现方式
1. 创建自定义用户表
在 云开发平台/文档型数据库 创建 users 集合,设计以下结构:
{
_id: "用户记录ID",
uid: "云开发用户ID(与系统用户表关联)",
address: "用户地址",
email: "邮箱",
phone: "手机号",
vip_level: "会员等级",
createTime: "创建时间"
}
2. 用户注册时创建扩展信息
import cloudbase from '@cloudbase/js-sdk';
const app = cloudbase.init({
env: 'your-env-id',
});
const auth = app.auth();
const db = app.database();
// 用户注册成功后
auth.signUp({
phone_number: '+86 13800000000',
verification_code: '123456',
verification_token: 'token',
name: '张三',
}).then(async () => {
// 获取当前用户 uid
const user = auth.currentUser;
// 在自定义用户表中创建扩展信息
await db.collection('users').add({
uid: user.uid, // 关联系统用户表
address: '北京市朝阳区',
email: 'zhangsan@example.com',
phone: '+86 13800000000',
vip_level: 1,
createTime: new Date(),
});
console.log('用户注册并创建扩展信息成功');
});
3. 查询用户完整信息
// 获取系统用户信息
const user = auth.currentUser;
console.log('系统用户信息:', user.uid, user.name);
// 获取自定义扩展信息
const { data } = await db.collection('users').where({ uid: user.uid }).get();
console.log('用户扩展信息:', data[0].address, data[0].email);
4. 更新用户扩展信息
// 更新自定义用户表中的信息
await db.collection('users').where({ uid: auth.currentUser.uid }).update({
address: '上海市浦东新区',
vip_level: 2,
});
最佳实践
- 分离关注点: 系统用户表专注于身份认证,自定义用户表专注于业务逻辑
- 使用 uid 关联: 通过
uid字段在两个表之间建立关联关系 - 合理设计字段: 根据业务需求设计自定义用户表的字段结构
- 注意数据同步: 当用户信息更新时,注意同步更新相关的数据表