Supabase y Astro
Supabase es un alternativa de código abierto a Firebase. Proporciona una base de datos Postgres, autenticación, funciones edge, suscripciones en tiempo real y almacenamiento.
Inicializando Supabase en Astro
Sección titulada Inicializando Supabase en AstroPrerrequisitos
Sección titulada Prerrequisitos- Un proyecto con Supabase. Si no tienes uno, puedes registrarte gratis en supabase.com y crear un nuevo proyecto.
- Un proyecto de Astro con renderizado del lado del servidor (SSR) (EN) habilitado.
- Las credenciales de Supabase para tu proyecto. Puedes encontrarlas en la pestaña Settings > API de tu proyecto de Supabase.
SUPABASE_URL
: La URL de tu proyecto de Supabase.SUPABASE_ANON_KEY
: La clave anónima de tu proyecto de Supabase.
Agregar credenciales de Supabase
Sección titulada Agregar credenciales de SupabasePara agregar tus credenciales de Supabase a tu proyecto de Astro, agrega lo siguiente a tu archivo .env
:
Ahora, estas variables de entorno están disponibles en tu proyecto.
Si deseas tener IntelliSense para tus variables de entorno, edita o crea el archivo env.d.ts
en tu directorio src/
y agrega lo siguiente:
Lee más sobre variables de entorno y archivos .env
en Astro.
Tu proyecto debería incluir estos archivos:
Directorysrc/
- env.d.ts
- .env
- astro.config.mjs
- package.json
Instalar dependencias
Sección titulada Instalar dependenciasPara conectarte a Supabase, necesitarás instalar @supabase/supabase-js
en tu proyecto.
Luego, crea un directorio llamado lib
en tu directorio src/
. Aquí es donde agregarás tu cliente de Supabase.
En supabase.ts
, agrega lo siguiente para inicializar tu cliente de Supabase:
Ahora, tu proyecto debería incluir estos archivos:
Directorysrc/
Directorylib/
- supabase.ts
- env.d.ts
- .env
- astro.config.mjs
- package.json
Agregar autenticación con Supabase
Sección titulada Agregar autenticación con SupabaseSupabase proporciona autenticación de forma inmediata. Admite autenticación por correo electrónico/contraseña y autenticación OAuth con muchos proveedores, incluidos GitHub, Google y otros.
Prerrequisitos
Sección titulada Prerrequisitos- Un proyecto de Astro inicializado con Supabase.
- Un proyecto de Supabase con autenticación por correo electrónico/contraseña habilitada. Puedes habilitar esto en la pestaña Authentication > Providers de tu proyecto de Supabase.
Creando endpoints de servidor de autenticación
Sección titulada Creando endpoints de servidor de autenticaciónPara agregar autenticación a tu proyecto, deberás crear algunos endpoints de servidor. Estos endpoints se utilizarán para registrar, iniciar sesión y cerrar sesión de los usuarios.
POST /api/auth/register
: para registrar un nuevo usuario.POST /api/auth/signin
: para iniciar sesión de un usuario.GET /api/auth/signout
: para cerrar la sesión de un usuario.
Crea estos endpoints en el directorio src/pages/api/auth
de tu proyecto. Si estás utilizando el modo de renderizado hybrid
, debes especificar export const prerender = false
en la parte superior de cada archivo para renderizar estos endpoints bajo demanda. Ahora tu proyecto debería incluir estos archivos:
Directorysrc/
Directorylib/
- supabase.ts
Directorypages/
Directoryapi/
Directoryauth/
- signin.ts
- signout.ts
- register.ts
- env.d.ts
- .env
- astro.config.mjs
- package.json
El archivo register.ts
crea un nuevo usuario en Supabase. Acepta una solicitud POST
con un correo electrónico y una contraseña. Luego, utiliza el SDK de Supabase para crear un nuevo usuario.
El archivo signin.ts
inicia sesión de un usuario. Acepta una solicitud POST
con un correo electrónico y una contraseña. Luego, utiliza el SDK de Supabase para iniciar sesión del usuario.
El archivo signout.ts
cierra la sesión de un usuario. Acepta una solicitud GET
y elimina los tokens de acceso y actualización del usuario.
Crear páginas de autenticación
Sección titulada Crear páginas de autenticaciónAhora que has creado tus endpoints de servidor, crea las páginas que los utilizarán.
src/pages/register
: contiene un formulario para registrar un nuevo usuario.src/pages/signin
: contiene un formulario para iniciar sesión de un usuario.src/pages/dashboard
: contiene una página que solo es accesible para usuarios autenticados.
Crea estas páginas en el directorio src/pages
. Ahora tu proyecto debería incluir estos archivos:
Directorysrc/
Directorylib/
- supabase.ts
Directorypages/
Directoryapi/
Directoryauth/
- signin.ts
- signout.ts
- register.ts
- register.astro
- signin.astro
- dashboard.astro
- env.d.ts
- .env
- astro.config.mjs
- package.json
El archivo register.astro
contiene un formulario para registrar un nuevo usuario. Acepta un correo electrónico y una contraseña y envía una solicitud POST
a /api/auth/register
.
El archivo signin.astro
contiene un formulario para iniciar sesión de un usuario. Acepta un correo electrónico y una contraseña y envía una solicitud POST
a /api/auth/signin
. También verifica la presencia de los tokens de acceso y actualización. Si están presentes, redirige al panel.
El archivo dashboard.astro
contiene una página que solo es accesible para usuarios autenticados. Verifica la presencia de los tokens de acceso y actualización. Si no están presentes, redirige a la página de inicio de sesión.
Agregar autenticación OAuth
Sección titulada Agregar autenticación OAuthPara agregar autenticación con OAuth a tu proyecto, deberás editar tu cliente de Supabase para habilitar el flujo de autenticación con "pkce"
. Puedes leer más sobre los flujos de autenticación en la documentación de Supabase.
Luego, en el panel de Supabase, habilita el proveedor de OAuth que te gustaría usar. Puedes encontrar la lista de proveedores compatibles en la pestaña Authentication > Providers de tu proyecto de Supabase.
El siguiente ejemplo utiliza GitHub como proveedor de OAuth. Para conectar tu proyecto a GitHub, sigue los pasos en la documentación de Supabase.
Luego, crea un nuevo endpoint de servidor para manejar la devolución de llamada de OAuth en src/pages/api/auth/callback.ts
. Este endpoint se utilizará para intercambiar el código de OAuth por un token de acceso y actualización.
Después, edita la página de inicio de sesión para incluir un nuevo botón para iniciar sesión con el proveedor de OAuth. Este botón debe enviar una solicitud POST
a /api/auth/signin
con el provider
establecido en el nombre del proveedor de OAuth.
Finalmente, edita el endpoint del servidor de inicio de sesión para manejar el proveedor de OAuth. Si el provider
está presente, redirigirá al proveedor de OAuth. De lo contrario, iniciará sesión del usuario con el correo electrónico y la contraseña.
Después de crear el endpoint de devolución de llamada de OAuth y editar la página de inicio de sesión y el endpoint del servidor, tu proyecto debería tener la siguiente estructura de archivos:
Directorysrc/
Directorylib/
- supabase.ts
Directorypages/
Directoryapi/
Directoryauth/
- signin.ts
- signout.ts
- register.ts
- callback.ts
- register.astro
- signin.astro
- dashboard.astro
- env.d.ts
- .env
- astro.config.mjs
- package.json
Recursos de la comunidad
Sección titulada Recursos de la comunidad- Adentrarse en el espíritu navideño con Astro, React y Supabase
- Demo de autenticación con Astro y Supabase