{"record":{"id":"69980aab41527fed","repo":"BloopAI/vibe-kanban","slug":"no-oauth-providers-configured","errorCode":null,"errorMessage":"no OAuth providers configured","messagePattern":"no OAuth providers configured","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"crates/remote/src/app.rs","lineNumber":77,"sourceCode":"\n        let mut registry = ProviderRegistry::new();\n\n        if let Some(github) = auth_config.github() {\n            registry.register(GitHubOAuthProvider::new(\n                github.client_id().to_string(),\n                github.client_secret().clone(),\n            )?);\n        }\n\n        if let Some(google) = auth_config.google() {\n            registry.register(GoogleOAuthProvider::new(\n                google.client_id().to_string(),\n                google.client_secret().clone(),\n            )?);\n        }\n\n        if registry.is_empty() && auth_config.local().is_none() {\n            bail!(\"no OAuth providers configured\");\n        }\n\n        let registry = Arc::new(registry);\n\n        let handoff_service = Arc::new(OAuthHandoffService::new(\n            pool.clone(),\n            registry.clone(),\n            jwt.clone(),\n            auth_config.public_base_url().to_string(),\n        ));\n\n        let oauth_token_validator = Arc::new(OAuthTokenValidator::new(\n            pool.clone(),\n            registry.clone(),\n            jwt.clone(),\n        ));\n\n        let loops_email_api_key = std::env::var(\"LOOPS_EMAIL_API_KEY\")","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/BloopAI/vibe-kanban/blob/4deb7eca8f381f7cbc1f9d15515a9ab8f8009053/crates/remote/src/app.rs#L59-L95","documentation":"The remote server requires at least one authentication mechanism: either an OAuth provider (GitHub/Google) registered in the registry or a configured local auth fallback. run() refuses to start when both are absent, because no user could ever authenticate.","triggerScenarios":"run() starts the remote app with no OAuth client id/secret set (GitHub and Google both absent) and auth_config has no local() auth configured.","commonSituations":"Fresh deployment missing GITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET env vars; config file with providers commented out; operator assumed local auth was enabled by default.","solutions":["Configure at least one OAuth provider (set client id/secret env vars for GitHub or Google)","Enable local auth in auth_config if OAuth is not desired","Verify the config file section for auth providers is present and parsed"],"exampleFix":"// before\n# no providers set\n// after\nGITHUB_CLIENT_ID=iv1.xxxx GITHUB_CLIENT_SECRET=xxxx ./remote-server\n# or set local auth in the auth config","handlingStrategy":"validation","validationCode":"let has_provider = std::env::var(\"GITHUB_CLIENT_ID\").is_ok() || std::env::var(\"GOOGLE_CLIENT_ID\").is_ok();\nif !has_provider && auth_config.local().is_none() { return Err(\"configure at least one OAuth provider or local auth\"); }","typeGuard":null,"tryCatchPattern":"match RemoteApp::run(...).await { Err(e) if e.to_string().contains(\"no OAuth providers configured\") => eprintln!(\"Set GITHUB_CLIENT_ID/SECRET or GOOGLE_CLIENT_ID/SECRET\"), other => other? }","preventionTips":["Check auth env vars in deployment startup scripts","Document required provider env vars for new deployments","Smoke-test login flow after each deploy"],"tags":["oauth","configuration","auth","startup"],"backgroundTag":"no-auth-providers-configured","analyzedSha":"4deb7eca8f381f7cbc1f9d15515a9ab8f8009053","analyzedAt":"2026-08-29T09:24:13.446Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}