Docs/Componenti
// componente
Button GitHub Sign-in
Bottone “Accedi con GitHub” riutilizzabile: avvia il flusso OAuth di Supabase e lascia che sia /api/auth/callback a scambiare il code con la sessione. Utile soprattutto in un boilerplate per sviluppatori, dove GitHub è il login più naturale. Client component.
File
components/ButtonGithubSignin.tsx
Uso base
app/signin/page.tsx
tsx
import ButtonGithubSignin from "@/components/ButtonGithubSignin";
// versione base
<ButtonGithubSignin />
// con etichetta e stile custom, e ritorno alla pagina corrente
<ButtonGithubSignin
label="Continua con GitHub"
className="w-full"
redirectTo="/checkout-success"
/>Props
className?: string— default"". Appesa alle classi basebtn-brutal-primary inline-flex items-center justify-center gap-2.label?: string— default"Accedi con GitHub".redirectTo?: string— pagina su cui vuoi tornare dopo lo scambio del code. Viene messa in query string come?next=...sulla URL di callback.
Cosa succede al click
components/ButtonGithubSignin.tsx
ts
const callback =
window.location.origin +
"/api/auth/callback" +
(redirectTo ? `?next=${encodeURIComponent(redirectTo)}` : "");
await supabase.auth.signInWithOAuth({
provider: "github",
options: { redirectTo: callback },
});Supabase manda il browser su GitHub, GitHub rimanda su /api/auth/callback, e lì exchangeCodeForSession crea i cookie di sessione. Lo spinner resta acceso fino alla navigazione: setLoading(false) viene chiamato solo nel catch, perché in caso di successo la pagina sta già cambiando.
Prima che funzioni
- Attiva il provider GitHub nel dashboard Supabase (Authentication → Providers) e incolla Client ID e Secret della tua OAuth App.
- Nella OAuth App di GitHub, la callback URL è quella di Supabase (
https://<project>.supabase.co/auth/v1/callback), non la tua. - Aggiungi il tuo dominio alle Redirect URL consentite in Supabase, altrimenti in produzione il redirect viene rifiutato.
Personalizzare
- Far funzionare davvero
redirectTo: oggiapp/api/auth/callback/route.tsignora il parametronexte manda sempre suconfig.auth.callbackUrl. Se ti serve, leggilo:
app/api/auth/callback/route.ts
ts
const next = requestUrl.searchParams.get("next");
return NextResponse.redirect(
requestUrl.origin + (next || config.auth.callbackUrl)
);- Altri provider: cambia
provider: "github"in"google","gitlab"… e sostituisci l'SVG. La paginaapp/signin/page.tsxfa già lo stesso flusso in modo generico con un parametroprovider. - Scope extra: aggiungi
options.scopesse ti servono permessi GitHub oltre al profilo (es.repo).