Docs/Componenti
// componente
Button Sign-in
Bottone che cambia faccia a seconda della sessione: se non sei loggato è un link alla pagina di login, se sei loggato mostra il tuo avatar (o l'iniziale) e porta alla pagina privata. Client component: legge l'utente con il client browser di Supabase in un useEffect.
File
components/ButtonSignin.tsx
Uso base
app/blog/_assets/components/HeaderBlog.tsx
tsx
import ButtonSignin from "@/components/ButtonSignin";
<ButtonSignin text="Inizia ora" extraStyle="btn-brutal-mustard" />Props
text?: string— default"Inizia ora". È l'etichetta mostrata solo nello stato non loggato. Da loggato il testo diventa il nome, oppure l'email, oppure “Account”.extraStyle?: string— classi extra appese al<Link>in entrambi gli stati.
Come decide dove mandarti
- Non loggato →
config.auth.loginUrl(di default/signin), classebtn-brutal-primary. - Loggato →
config.auth.callbackUrl(di default/dashboard), classebtn-brutal, conuser_metadata.avatar_urlse il provider lo fornisce, altrimenti un quadrato con l'iniziale.
config.ts
ts
auth: {
loginUrl: "/signin",
callbackUrl: "/dashboard",
},Personalizzare
- Destinazioni: non toccare il componente, cambia
config.auth. Gli stessi valori sono usati dalibs/api.tse dalla route di callback — vedi Autenticazione. - Il primo frame: finché
getUser()non risponde,userènulle vedi lo stato “non loggato”. Se ti dà fastidio il salto, aggiungi uno statoisLoadinge renderizza uno skeleton. - Avatar: la
<img>punta direttamente all'URL del provider conreferrerPolicy="no-referrer". Se vuoinext/image, ricordati di aggiungere il dominio innext.config.js. - Server component: non puoi usarlo dentro un server component senza il boundary, perché ha
"use client". Va bene comunque importarlo da una pagina server: Next crea il boundary da solo.