Autenticação
Autenticação e autorização são dois processos de segurança que te ajudam a controlar quem possui acesso a diferentes parte do seu website ou aplicativo. Autenticação é o processo de verificar a identidade de um visitante, e autorização é o processo de permitir aos visitantes acesso a recursos e rotas protegidas.
Autenticação te permite customizar áreas do seu site para indivíduos logados e fornece proteção máxima a informações pessoais ou privadas. Bibliotecas de autenticação (e.x. Lucia Auth, Auth.js) fornecem utilidades para múltiplos métodos de autenticação como acesso por email e provedores OAuth.
Não existe solução oficial para autenticação no Astro, mas você pode encontrar integrações “auth” da comunidade no diretório de integrações.
Lucia é uma biblioteca de autenticação baseada em sessões que não depende de frameworks com grande suporte para o Astro.
Instalação
Seção intitulada InstalaçãoInstale Lucia utilizando o gerenciador de pacotes da sua escolha.
npm install lucia
pnpm add lucia
yarn add lucia
Configuração
Seção intitulada ConfiguraçãoUse o guia “Começando com Astro” da Lucia para inicializar a Lucia com um adaptador e implementar um banco de dados para armazenar usuários e sessões.
Utilização
Seção intitulada UtilizaçãoSiga um dos tutoriais Astro completos da Lucia para adicionar autenticação do nome de usuário e senha ou GitHub OAuth para o seu projeto Astro.
Próximos passos
Seção intitulada Próximos passosAuth.js
Seção intitulada Auth.jsAuth.js é uma solução para autenticação que independe de frameworks. Um adaptador do framework, feito pela comunidade, auth-astro
está disponível para o Astro.
Instalação
Seção intitulada InstalaçãoUse o comando astro add
do seu gerenciador de pacotes preferido para adicionar a integração astro-auth
.
npx astro add auth-astro
pnpm astro add auth-astro
yarn astro add auth-astro
Instalação manual
Seção intitulada Instalação manualPara instalar astro-auth
manualmente, instale o pacote necessário para seu gerenciador de pacotes:
npm install auth-astro
pnpm add auth-astro @auth/core
yarn add auth-astro
Então, adicione a integração no seu arquivo astro.config.*
usando a propriedade integrations
:
import { defineConfig } from 'astro/config';import auth from 'auth-astro';
export default defineConfig({ // ... integrations: [auth()],});
Configuração
Seção intitulada ConfiguraçãoCrie um arquivo auth.config.mjs
no diretório raiz do projeto. Adicione qualquer provedor auth ou métodos que você deseja dar suporte, junto de qualquer variável de ambiente que eles requerem.
import GitHub from '@auth/core/providers/github';import { defineConfig } from 'auth-astro';
export default defineConfig({ providers: [ GitHub({ clientId: import.meta.env.GITHUB_CLIENT_ID, clientSecret: import.meta.env.GITHUB_CLIENT_SECRET, }), ],});
Crie um arquivo .env
na raiz do seu projeto caso não exista. Adicione as duas variáveis de ambiente a seguir. AUTH_SECRET
deve ser uma private string com um mínimo de 32 caracteres.
AUTH_TRUST_HOST=trueAUTH_SECRET=<my-auth-secret>
Utilização
Seção intitulada UtilizaçãoVocê pode adicionar botões de login e logout utilizando o módulo auth-astro/client
em uma tag de script ou componente de framework client-side.
---import Layout from 'src/layouts/Base.astro';---<Layout> <button id="login">Login</button> <button id="logout">Logout</button>
<script> const { signIn, signOut } = await import("auth-astro/client") document.querySelector("#login").onclick = () => signIn("github") document.querySelector("#logout").onclick = () => signOut() </script></Layout>
Você pode buscar a sessão do usuário utilizando o método getSession
.
---import Layout from 'src/layouts/Base.astro';import { getSession } from 'auth-astro/server';
const session = await getSession(Astro.request);---<Layout> { session ? ( <p>Bem-vindo {session.user?.name}</p> ) : ( <p>Não realizou o login</p> ) }</Layout>