Перейти к содержимому

Аутентификация

Аутентификация и авторизация — это два процесса безопасности, управляющие доступом к вашему сайту или приложению. Аутентификация подтверждает личность посетителя, а авторизация предоставляет доступ к защищенным разделам и ресурсам.

Аутентификация позволяет персонализировать части сайта для вошедших пользователей и защищать личную информацию. Библиотеки аутентификации (например, Better Auth, Clerk) предоставляют инструменты для различных методов входа: через email, социальные сети (OAuth) и другие.

Узнайте, как добавить аутентификацию с помощью Supabase (EN) или Firebase (EN) в наших специальных руководствах.

Better Auth — это независимый от фреймворка инструмент для аутентификации (и авторизации) на TypeScript. Он предлагает богатый набор функций «из коробки» и экосистему плагинов для расширенной функциональности.

Он поддерживает Astro официально и может быть легко интегрирован в ваш проект.

Окно терминала
npm install better-auth

Настройте таблицы базы данных для хранения данных пользователей и выберите методы входа, как описано в руководстве по установке Better Auth. Затем вам нужно будет создать обработчик (handler) в вашем проекте Astro.

src/pages/api/auth/[...all].ts
import { auth } from "../../../lib/auth"; // импорт вашего экземпляра Better Auth
import type { APIRoute } from "astro";
export const prerender = false; // Обязательно для работы в режиме сервера
export const ALL: APIRoute = async (ctx) => {
return auth.handler(ctx.request);
};

Подробности ищите в руководстве по Better Auth для Astro.

Clerk — это комплексная платформа, предоставляющая готовые интерфейсы (UI), гибкие API и панели управления для управления пользователями. Для Astro доступен официальный SDK @clerk/astro.

Clerk предоставляет компоненты, которые позволяют управлять видимостью страниц в зависимости от состояния аутентификации. Покажите гостям кнопку входа, а авторизованным пользователям — их профиль:

src/pages/index.astro
---
import Layout from 'src/layouts/Base.astro';
import { SignedIn, SignedOut, UserButton, SignInButton } from '@clerk/astro/components';
export const prerender = false;
---
<Layout>
<SignedIn>
<UserButton />
</SignedIn>
<SignedOut>
<SignInButton />
</SignedOut>
</Layout>

Также вы можете защищать маршруты на уровне сервера с помощью мидлвара.

Lucia — это популярный ресурс для реализации аутентификации на основе сессий. Хотя проект перешел в режим поддержки, его руководства по-прежнему являются отличным источником знаний о том, как устроена аутентификация «под капотом».

  1. Создайте базовый API сессий с выбранной базой данных.
  2. Добавьте куки сессий, используя эндпойнты и мидлвар.
  3. Реализуйте GitHub OAuth.