Skip to main content

User Metadata

IUserMetadataStore attaches arbitrary key/value metadata to users without changing BaseUser or your users table.

Interface

import { IUserMetadataStore } from '@nik2208/node-auth';

export class MyUserMetadataStore implements IUserMetadataStore {
async getMetadata(userId: string): Promise<Record<string, unknown>> {
const row = await db('user_metadata').where({ userId }).first();
return row ? JSON.parse(row.data) : {};
}

async updateMetadata(userId: string, metadata: Record<string, unknown>): Promise<void> {
const existing = await this.getMetadata(userId);
const merged = { ...existing, ...metadata };
await db('user_metadata')
.insert({ userId, data: JSON.stringify(merged) })
.onConflict('userId').merge();
}

async clearMetadata(userId: string): Promise<void> {
await db('user_metadata').where({ userId }).delete();
}
}

Usage

const metaStore = new MyUserMetadataStore();

// Store preferences after login
await metaStore.updateMetadata(userId, { theme: 'dark', lang: 'it' });

// Read them back
const meta = await metaStore.getMetadata(userId);
console.log(meta.theme); // 'dark'

Pass metadataStore to auth.router() to include metadata in GET /auth/me.