Integrando Supabase com Nuxt
O Supabase é uma das melhores alternativas open-source ao Firebase: banco de dados PostgreSQL, autenticação, storage e API em tempo real, tudo em um único lugar. Combinado com o Nuxt, você tem uma stack full-stack extremamente produtiva.
Instalação
Instale o módulo oficial do Supabase para Nuxt:
npx nuxi module add supabase
Ele adiciona @nuxtjs/supabase automaticamente ao nuxt.config.ts.
Configuração
Adicione suas credenciais no arquivo .env:
SUPABASE_URL=https://seu-projeto.supabase.co
SUPABASE_KEY=sua-anon-key-publica
O módulo expõe essas variáveis automaticamente — não é necessário nenhuma configuração extra no nuxt.config.ts.
Consultando o banco de dados
O módulo disponibiliza o composable useSupabaseClient() em qualquer componente ou página:
<script setup>
const supabase = useSupabaseClient()
const { data: posts } = await useAsyncData('posts', () =>
supabase.from('posts').select('*').order('created_at', { ascending: false })
)
</script>
Autenticação
Login com e-mail e senha
<script setup>
const supabase = useSupabaseClient()
async function login(email, password) {
const { error } = await supabase.auth.signInWithPassword({ email, password })
if (error) console.error(error.message)
}
</script>
Login com OAuth (GitHub, Google...)
await supabase.auth.signInWithOAuth({ provider: 'github' })
Usuário autenticado
Use o composable useSupabaseUser() para acessar o usuário atual de forma reativa:
<script setup>
const user = useSupabaseUser()
</script>
<template>
<p v-if="user">Olá, {{ user.email }}</p>
<p v-else>Você não está logado.</p>
</template>
Protegendo rotas
Crie um middleware em middleware/auth.ts:
export default defineNuxtRouteMiddleware(() => {
const user = useSupabaseUser()
if (!user.value) return navigateTo('/login')
})
E adicione na página que deseja proteger:
<script setup>
definePageMeta({ middleware: 'auth' })
</script>
Row Level Security (RLS)
Não esqueça de ativar o RLS nas suas tabelas no painel do Supabase. A anon key usada no frontend tem acesso apenas ao que as políticas de RLS permitem — isso é fundamental para a segurança da aplicação.
Com essa base você já tem autenticação e acesso ao banco funcionando. A partir daqui é só construir.