* fix: resolve OIDC session loss and migration failures This commit fixes three critical issues affecting OIDC/SSO authentication: 1. Session Not Saved Before Redirect - Added explicit req.session.save() callback in OIDC callback handler - Ensures session is persisted before redirecting to /today - Prevents 401 errors after successful SSO authentication 2. Migration Resilience - Added DROP TABLE IF EXISTS users_new in migration - Prevents "table already exists" errors from failed migrations - Created cleanup script for orphaned migration tables 3. Trust Proxy Documentation - Documented TUDUDI_TRUST_PROXY requirement for reverse proxy deployments - Added troubleshooting guide for session loss issues - Updated .env.example with OIDC configuration examples Fixes session loss when deployed behind reverse proxies (nginx, Traefik, etc.) Changes: - backend/modules/oidc/controller.js: Add session.save() before redirect - backend/migrations/20260420000004-make-password-optional.js: Add DROP TABLE IF EXISTS - backend/scripts/cleanup-failed-migration.js: New cleanup utility - backend/.env.example: Add OIDC and trust proxy examples - docs/10-oidc-sso.md: Add trust proxy configuration and troubleshooting - docs/feature-plans/00-oidc-sso.md: Document required environment variables * fix: prettier formatting in cleanup script
49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Cleanup script for failed migration 20260420000004-make-password-optional
|
|
*
|
|
* This script removes the leftover users_new table if it exists,
|
|
* allowing the migration to run again cleanly.
|
|
*
|
|
* Usage:
|
|
* node backend/scripts/cleanup-failed-migration.js
|
|
*/
|
|
|
|
const { sequelize } = require('../models');
|
|
|
|
async function cleanup() {
|
|
console.log('🔍 Checking for leftover migration tables...');
|
|
|
|
try {
|
|
const [results] = await sequelize.query(`
|
|
SELECT name FROM sqlite_master
|
|
WHERE type='table' AND name='users_new'
|
|
`);
|
|
|
|
if (results.length > 0) {
|
|
console.log(
|
|
'⚠️ Found leftover users_new table from failed migration'
|
|
);
|
|
console.log('🧹 Dropping users_new table...');
|
|
|
|
await sequelize.query('DROP TABLE users_new');
|
|
|
|
console.log('✅ Cleanup completed successfully');
|
|
console.log(
|
|
'💡 You can now run migrations again: npm run db:migrate'
|
|
);
|
|
} else {
|
|
console.log('✅ No cleanup needed - no leftover tables found');
|
|
}
|
|
|
|
await sequelize.close();
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('❌ Cleanup failed:', error.message);
|
|
await sequelize.close();
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
cleanup();
|