Skip to main content

Store Extra User Information

System User Table vs Custom User Table

After using CloudBase login authentication, the user's basic information (such as uid, login method, basic profile, etc.) is automatically stored in the system-maintained user table. If you need to store business-related extra user information (such as address, email, membership level, etc.), it's recommended to create a custom user table.

System User Table:

  • Automatically maintained by CloudBase
  • Stores user authentication-related information (uid, name, gender, login method, etc.)
  • Accessed through auth.currentUser
  • Not recommended to directly add business fields to this table

Custom User Table (Recommended):

  • Created and maintained by developers (e.g., users collection)
  • Stores business-related extension information (address, email, points, membership level, etc.)
  • Associated with system user table through uid
  • Flexible field extension to meet business needs

Implementation

1. Create Custom User Table

Create a users collection at CloudBase Platform/Document Database with the following structure:

{
_id: "User record ID",
uid: "CloudBase user ID (associated with system user table)",
address: "User address",
email: "Email",
phone: "Phone number",
vip_level: "Membership level",
createTime: "Creation time"
}

2. Create Extension Information During User Registration

import cloudbase from '@cloudbase/js-sdk';

const app = cloudbase.init({
env: 'your-env-id',
});

const auth = app.auth();
const db = app.database();

// After user registration succeeds
auth.signUp({
phone_number: '+86 13800000000',
verification_code: '123456',
verification_token: 'token',
name: '张三',
}).then(async () => {
// Get current user uid
const user = auth.currentUser;

// Create extension information in custom user table
await db.collection('users').add({
uid: user.uid, // Associate with system user table
address: '北京市朝阳区',
email: 'zhangsan@example.com',
phone: '+86 13800000000',
vip_level: 1,
createTime: new Date(),
});

console.log('User registration and extension information creation successful');
});

3. Query Complete User Information

// Get system user information
const user = auth.currentUser;
console.log('System user information:', user.uid, user.name);

// Get custom extension information
const { data } = await db.collection('users').where({ uid: user.uid }).get();

console.log('User extension information:', data[0].address, data[0].email);

4. Update User Extension Information

// Update information in custom user table
await db.collection('users').where({ uid: auth.currentUser.uid }).update({
address: '上海市浦东新区',
vip_level: 2,
});

Best Practices

  • Separation of Concerns: System user table focuses on authentication, custom user table focuses on business logic
  • Use uid for Association: Establish association between two tables through the uid field
  • Reasonable Field Design: Design custom user table field structure based on business needs
  • Pay Attention to Data Sync: When user information is updated, remember to sync related data tables