From 57b3e7700f0493d0dff7dc35ab71e4498c5ecd22 Mon Sep 17 00:00:00 2001 From: Frederic Cabassut Date: Mon, 9 Mar 2026 11:47:48 +0100 Subject: [PATCH] fix: migrate password_hash column to nullable for OAuth-only users Existing databases created from the original migration had password_hash as NOT NULL. This adds an auto-migration that recreates the users table with a nullable password_hash column, enabling OAuth-only user creation. Co-Authored-By: Claude Opus 4.6 --- src/lib/server/db/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts index be046c5..3e488af 100644 --- a/src/lib/server/db/index.ts +++ b/src/lib/server/db/index.ts @@ -201,6 +201,29 @@ try { // Column already exists } +// Migration: make password_hash nullable (for OAuth-only users) +const pwCol = ( + sqlite.prepare("PRAGMA table_info('users')").all() as { name: string; notnull: number }[] +).find((col) => col.name === 'password_hash'); +if (pwCol && pwCol.notnull) { + sqlite.exec(` + CREATE TABLE __new_users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + email TEXT NOT NULL DEFAULT '', + display_name TEXT NOT NULL DEFAULT '', + role TEXT NOT NULL DEFAULT 'user', + password_hash TEXT, + auth_provider TEXT NOT NULL DEFAULT 'password', + provider_id TEXT, + created_at INTEGER NOT NULL + ); + INSERT INTO __new_users(id, email, display_name, role, password_hash, auth_provider, provider_id, created_at) + SELECT id, email, display_name, role, password_hash, auth_provider, provider_id, created_at FROM users; + DROP TABLE users; + ALTER TABLE __new_users RENAME TO users; + `); +} + // Re-enable foreign keys sqlite.pragma('foreign_keys = ON');