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.