Autenticar usuarios en Astro con Clerk y React: una guía paso a paso
LaunchFast Logo LaunchFast

Autenticar usuarios en Astro con Clerk y React: una guía paso a paso

Rishi Raj Jain
Authenticating users in Astro with Clerk and React

En esta guía, aprenderá cómo autenticar usuarios en una aplicación Astro usando Clerk y React. Pasará por el proceso de configuración de un nuevo proyecto Astro, habilitando la representación del lado del servidor usando el adaptador Nodejs e integrando Clerk para autenticar usuarios sin problemas.

Kits de inicio de alta calidad con flujo de autenticación integrada (Auth.js), carga de objetos (AWS, Clouflare R2, Firebase Storage, Supabase Storage), pagos integrados (Stripe, LemonSqueezy), flujo de verificación de correo electrónico (Resend, Postmark, Sendgrid) y mucho más . Compatible con cualquier base de datos (Redis, Postgres, MongoDB, SQLite, Firestore).

Requisitos previos

Necesitará lo siguiente:

Tabla de contenido

Crea una nueva aplicación Astro

Comencemos creando un nuevo proyecto Astro. Ejecute el siguiente comando:

Terminal window
npm create astro@latest my-app

npm create astro es la forma recomendada de desarrollar rápidamente un proyecto Astro

Cuando se le solicite, elija:

  • Empty cuando se le pregunta cómo iniciar el nuevo proyecto
  • cuando se le pregunte si planea escribir Typecript
  • Estricto cuando se le pregunta qué tan estricto debe ser Typecript.
  • cuando se le solicita instalar dependencias
  • cuando se le solicita inicializar un repositorio de git

Una vez hecho esto, puede ir al directorio del proyecto e iniciar la aplicación:

Terminal window
cd my-app
npm run dev

La aplicación debería estar ejecutándose en localhost:4321

Ahora, pasemos a integrar React en tu aplicación Astro.

Integra React en tu proyecto Astro

Para crear interfaces de usuario dinámicas con Clerk, integrará React en su proyecto Astro. Ejecute el siguiente comando:

Terminal window
npx astro add react

npx nos permite ejecutar paquetes binarios npm sin tener que instalarlo primero globalmente

Cuando se le solicite, elija lo siguiente:

  • cuando se le pregunta si desea instalar las dependencias de React
  • cuando se le pregunta si desea realizar cambios en el archivo de configuración de Astro
  • cuando se le pregunta si desea realizar cambios en el archivo tsconfigjson

Ahora, pasemos a habilitar la renderización del lado del servidor en su aplicación Astro.

Integre el adaptador Nodejs en su proyecto Astro

Para autenticar y mantener sesiones de usuario con Clerk, habilitará la representación del lado del servidor en su proyecto Astro a través del adaptador Nodejs. Ejecute el siguiente comando:

Terminal window
npx astro add node

Cuando se le solicite, elija lo siguiente:

  • cuando se le pregunta si desea instalar las dependencias de Nodejs
  • cuando se le pregunta si desea realizar cambios en el archivo de configuración de Astro

Ahora, pasemos a crear una nueva aplicación de Secretario.

Crear una nueva aplicación de secretario

  • En su Panel del empleado, para crear una nueva aplicación, presione la tarjeta + Nueva aplicación para comenzar a seleccionar de forma interactiva su propio formulario de configuración de autenticación.
Create a new Clerk Application
  • Con un nombre de aplicación de su elección, habilite la autenticación de usuario mediante credenciales activando Correo electrónico y permita la autenticación de usuario mediante inicio de sesión social activando proveedores como Google, GitHub y * Microsoft*
Select authentication providers
  • Una vez que se crea la aplicación en el panel de Clerk, de forma predeterminada se le mostrarán las claves API de su aplicación para Nextjs. Copie y almacene de forma segura estas claves API en un archivo llamado env para usar en su aplicación Astro de la siguiente manera:
.env
# Clerk Environment Variables
PUBLIC_ASTRO_APP_CLERK_PUBLISHABLE_KEY="pk_test_..."
CLERK_SECRET_KEY="sk_test_..."
Clerk Environment Variables

Ahora, pasemos a integrar Clerk en tu proyecto Astro.## Integra Clerk en tu proyecto Astro

Instale el SDK de la comunidad de secretarios para Astro

Ejecute el siguiente comando para instalar el paquete necesario para crear autenticación con Clerk:

Terminal window
npm install astro-clerk-auth

El comando instala la siguiente biblioteca:

  • astro-clerk-auth: un paquete que integra Clerk con Astro a través de soporte de Middleware y componentes integrados de React y Astro para Clerk

Además, realice las siguientes adiciones en astroconfigmjs para usar la integración de Clerk:

astro.config.mjs
import node from "@astrojs/node";
import react from "@astrojs/react";
import clerk from "astro-clerk-auth"; // [!code ++] // [!code focus]
import { defineConfig } from "astro/config";
export default defineConfig({
output: "server",
adapter: node({
mode: "standalone",
}),
integrations: [
react(),
clerk({ // [!code ++] // [!code focus]
afterSignInUrl: "/", // [!code ++] // [!code focus]
afterSignUpUrl: "/", // [!code ++] // [!code focus]
}), // [!code ++] // [!code focus]
],
});

Intercepta todas las solicitudes entrantes utilizando el middleware Astro

Para asegurarse de que cada solicitud mantenga una sesión de usuario accesible a través de los puntos finales del lado del servidor y en las páginas “astro” durante la representación del lado del servidor, creará un middleware que utilice Clerk para decodificar/codificar una sesión de usuario a partir de la cookie.

Cree un archivo middlewarets en el directorio src con el siguiente código:

src/middleware.ts
import { clerkMiddleware } from "astro-clerk-auth/server";
export const onRequest = clerkMiddleware();

Crear la ruta de índice

Cree un Appjsx dentro del directorio src con el siguiente código:

import { SignedIn, SignedOut, UserButton } from "astro-clerk-auth/client/react";
export default function () {
return <>
<SignedOut>
<a href="/sign-in" className="rounded-sm border px-3 py-1 max-w-max">
Sign In
</a>
</SignedOut>
<SignedIn>
<UserButton />
</SignedIn>
</>
}

El código anterior hace lo siguiente:

  • Importa los componentes SignedIn y SignedOut que describen el estado del usuario, ya sea que haya iniciado sesión o no.
  • Crea estados condicionales, mostrando un botón “Iniciar sesión” si el usuario ha cerrado sesión; de lo contrario, presenta un componente “UserButton” interactivo que permite al usuario cerrar sesión y administrar su configuración.

Para usar este componente de React en la página de inicio de su aplicación, realice los siguientes cambios en el archivo src/pages/indexastro:

src/pages/index.astro
---
import App from "../App"; // [!code ++] // [!code focus]
---
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>Astro</title>
</head>
<body>
<App client:load /> // [!code ++] // [!code focus]
</body>
</html>

Los cambios anteriores importan el componente React App y usan la directiva client:load de Astro para asegurarse de que este componente React se hidrate inmediatamente en la página.

Crear una página de inicio de sesión personalizada

Cree un archivo sign-inastro dentro del directorio src/pages con el siguiente comando:

src/pages/sign-in.astro
---
import { SignIn as ClerkSignIn } from "astro-clerk-auth/client/react";
---
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>Astro</title>
</head>
<body>
<ClerkSignIn client:load />
</body>
</html>

El código anterior hace lo siguiente:

  • Importa el componente SignIn que muestra todos los métodos de autenticación habilitados al crear la aplicación Clerk a través del panel
  • Utilice la directiva client:load de Astro para asegurarse de que este componente de React se hidrate inmediatamente en la página.

Cree y pruebe su aplicación Astro localmente

Para probar la aplicación, prepare una compilación y ejecute el servidor de vista previa usando el siguiente comando:

Terminal window
npm run build && node ./dist/server/entry.mjs

Conclusión

En esta guía, habilitó la autenticación de usuario a través de varios métodos con la ayuda de Clerk en una aplicación de Astro. También adquirió algo de experiencia en el uso de React en Astro y comprendió cómo puede ayudarlo a crear interfaces de usuario dinámicas.

Si tiene alguna pregunta o comentario, no dude en comunicarse conmigo en Twitter

Learn More Autenticación de Benutzern en Astro mit besserer Authentifizierung: Eine Schritt-für-Schritt-Anleitung
Autenticación de Benutzern en Astro mit besserer Authentifizierung: Eine Schritt-für-Schritt-Anleitung November 24, 2024
Astro vs.Next.js: Auswahl de los mejores frameworks en enero de 2024
Astro vs.Next.js: Auswahl de los mejores frameworks en enero de 2024 October 30, 2024
6 funciones diferentes, el kit de inicio web completo incluye todas las funciones
6 funciones diferentes, el kit de inicio web completo incluye todas las funciones October 26, 2024