plover-auth

Diagnose and fix Supabase authentication and Google OAuth errors in the Plover Electron app.

1|Updated May 24, 2026
One-click install
npx skills add https://github.com/tryplover/Plover --skill plover-auth-tryplover
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: plover-auth
Source: https://github.com/tryplover/Plover/tree/main/.claude/skills/plover-auth
Command: npx skills add https://github.com/tryplover/Plover --skill plover-auth-tryplover

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Signed-in users of the Plover desktop app can still hit "UnauthorizedError: not signed in" or "no plover token" when creating goals, and Google Sync OAuth can fail with invalid_client errors after consent. This Skill explains the unified Supabase auth architecture and provides fixes for each failure mode. ## Core Features & Use Cases - Auth error triage: Maps symptoms like "no plover token" and 401s to root causes across the Electron app and the plover-server backend middleware. - Sign-in UI guidance: Directs new sign-in/sign-up UI to the shared AuthPanel component and isNotSignedInError helper instead of parallel auth flows. - Google Sync OAuth fix: Explains why PKCE token exchange fails with "client_secret is missing" and how to recreate the GCP OAuth client as a Desktop app type. - Use Case: A user signs in with Google but goal creation throws UnauthorizedError. Use this Skill to determine whether the deployed plover-server middleware still expects the legacy X-Plover-Auth-Token header instead of verifying Supabase Bearer tokens. ## Quick Start Ask the assistant to diagnose why a signed-in Plover user gets "UnauthorizedError: not signed in" when creating a goal.

Frequently Asked Questions about plover-auth

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
Why does a signed-in user get "UnauthorizedError: no plover token" when creating a goal?▼

The deployed plover-server middleware likely still expects the legacy X-Plover-Auth-Token header instead of verifying Supabase Bearer tokens. Update the backend middleware to verify tokens via supabase.auth.getUser() and redeploy with Supabase credentials configured.

How do I add sign-in UI to a new feature that calls the Plover backend?▼

Import isNotSignedInError from app/src/shared/auth-errors.ts and render the shared AuthPanel component inline when catching the error. Retry the original call from AuthPanel's onSuccess callback, following the pattern in StepBreakdown.tsx.

Why does Google OAuth token exchange fail with "client_secret is missing"?▼

The GCP OAuth client is registered as type Web application, but the app uses PKCE without a client secret. Google only accepts secret-less exchanges for Desktop app type clients, so recreate the client as Desktop app and update GOOGLE_CLIENT_ID.

Can I add a separate sign-in mechanism alongside Supabase in Plover?▼

No. Supabase is the single identity system across the Electron app, plover-website, and plover-server. Extend supabase-auth.ts or reuse AuthPanel rather than adding deep links, separate tokens, or parallel OAuth clients.

How does a backend endpoint get the caller's identity in plover-server?▼

After authMiddleware runs, the caller's identity arrives as req.userId, a Supabase UUID. This matches the id space used by plover-website profiles and Stripe client_reference_id.