BloopAI/vibe-kanban · critical

no OAuth providers configured

Error message

no OAuth providers configured

What it means

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.

Source

Thrown at crates/remote/src/app.rs:77

        let mut registry = ProviderRegistry::new();

        if let Some(github) = auth_config.github() {
            registry.register(GitHubOAuthProvider::new(
                github.client_id().to_string(),
                github.client_secret().clone(),
            )?);
        }

        if let Some(google) = auth_config.google() {
            registry.register(GoogleOAuthProvider::new(
                google.client_id().to_string(),
                google.client_secret().clone(),
            )?);
        }

        if registry.is_empty() && auth_config.local().is_none() {
            bail!("no OAuth providers configured");
        }

        let registry = Arc::new(registry);

        let handoff_service = Arc::new(OAuthHandoffService::new(
            pool.clone(),
            registry.clone(),
            jwt.clone(),
            auth_config.public_base_url().to_string(),
        ));

        let oauth_token_validator = Arc::new(OAuthTokenValidator::new(
            pool.clone(),
            registry.clone(),
            jwt.clone(),
        ));

        let loops_email_api_key = std::env::var("LOOPS_EMAIL_API_KEY")

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Configure at least one OAuth provider (set client id/secret env vars for GitHub or Google)
  2. Enable local auth in auth_config if OAuth is not desired
  3. Verify the config file section for auth providers is present and parsed

Example fix

// before
# no providers set
// after
GITHUB_CLIENT_ID=iv1.xxxx GITHUB_CLIENT_SECRET=xxxx ./remote-server
# or set local auth in the auth config
Defensive patterns

Strategy: validation

Validate before calling

let has_provider = std::env::var("GITHUB_CLIENT_ID").is_ok() || std::env::var("GOOGLE_CLIENT_ID").is_ok();
if !has_provider && auth_config.local().is_none() { return Err("configure at least one OAuth provider or local auth"); }

Try / catch

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? }

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29). Data as JSON: /api/errors/69980aab41527fed. Report an issue: GitHub.