Todos los artículos
Integraciones· Intermedio

Autenticación con Google en Vue 3 y VueFire

Conecta Firebase Auth con VueFire y añade acceso con Google, cierre de sesión y errores visibles.

LA

Luis Aldair Quispe Rios

2 min de lectura
Autenticación con Google en Vue 3 y VueFire

Objetivo y requisitos

Vamos a integrar Firebase Auth con VueFire en una aplicación Vue 3 con Vite, iniciar sesión con Google y cerrar sesión. Esta guía usa las APIs de VueFire 3 y Firebase modular. Necesitas un proyecto Firebase con Authentication habilitado, el proveedor Google activado y el dominio de desarrollo autorizado en la consola de Firebase.

Instala y registra VueFire

npm install firebase vuefire

Guarda la configuración web de tu proyecto en .env.local, con variables VITE_FIREBASE_API_KEY, VITE_FIREBASE_AUTH_DOMAIN, VITE_FIREBASE_PROJECT_ID y VITE_FIREBASE_APP_ID. Usa los valores de tu propia aplicación web de Firebase. Reinicia Vite después de modificar esas variables.

En src/main.ts:

import { createApp } from 'vue'
import { initializeApp } from 'firebase/app'
import { VueFire, VueFireAuth } from 'vuefire'
import App from './App.vue'

const firebaseApp = initializeApp({
  apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
  authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
  projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
  appId: import.meta.env.VITE_FIREBASE_APP_ID,
})

createApp(App)
  .use(VueFire, { firebaseApp, modules: [VueFireAuth()] })
  .mount('#app')

Un componente completo de autenticación

useFirebaseAuth devuelve la instancia de Auth. useCurrentUser sigue el usuario actual de forma reactiva. No necesitas un router ni una biblioteca de notificaciones para este ejemplo.

<script setup lang="ts">
import { ref } from 'vue'
import { GoogleAuthProvider, signInWithPopup, signOut } from 'firebase/auth'
import { useCurrentUser, useFirebaseAuth } from 'vuefire'

const auth = useFirebaseAuth()
const user = useCurrentUser()
const busy = ref(false)
const errorMessage = ref<string | null>(null)
const provider = new GoogleAuthProvider()

async function authenticate(action: 'login' | 'logout') {
  errorMessage.value = null
  if (!auth) {
    errorMessage.value = 'Firebase Auth no está disponible.'
    return
  }
  busy.value = true
  try {
    if (action === 'login') await signInWithPopup(auth, provider)
    else await signOut(auth)
  } catch (cause: unknown) {
    errorMessage.value = cause instanceof Error ? cause.message : 'No se pudo completar la operación.'
  } finally {
    busy.value = false
  }
}
</script>

<template>
  <section>
    <p v-if="user">Hola, {{ user.displayName || 'usuario' }}</p>
    <button v-if="user" :disabled="busy" @click="authenticate('logout')">Cerrar sesión</button>
    <button v-else :disabled="busy" @click="authenticate('login')">Continuar con Google</button>
    <p v-if="busy" role="status">Procesando…</p>
    <p v-if="errorMessage" role="alert">{{ errorMessage }}</p>
  </section>
</template>

Resultado esperado

Ejecuta npm run dev y pulsa «Continuar con Google». Tras completar el acceso en tu aplicación, aparecerán el nombre y el botón de salida. Cierra sesión: debe volver el botón de acceso. Si cancelas la ventana o falla la operación, el error se muestra y el botón vuelve a estar disponible. Ejecuta npm run build para comprobar la compilación.

Errores frecuentes y límites

Un error auth/unauthorized-domain requiere revisar los dominios autorizados en Firebase. Un popup bloqueado requiere iniciar la operación desde la interacción del usuario. Si Auth no está disponible, comprueba el registro de VueFireAuth(). El ejemplo maneja el error capturado con un nombre distinto de la referencia; no sobrescribe ni confunde ambos valores.

Esta configuración está dirigida a una aplicación de navegador. En Nuxt/SSR usa la integración correspondiente y contempla que useFirebaseAuth puede devolver null en el servidor. Iniciar sesión tampoco concede acceso automático a Firestore o Storage: configura sus reglas cuando añadas esos servicios.

Continúa con la guía oficial de autenticación de VueFire y la autenticación con Google de Firebase.

Sigue leyendo

¿Cómo integrar Tailwind 4 en Vue.js 3 + Vite?

¿Cómo integrar Tailwind 4 en Vue.js 3 + Vite?

Configura Tailwind CSS 4 en Vue 3 con los plugins de Vue y Tailwind para Vite.
Web Components con Vue 3: distribuye un contador con defineCustomElement

Web Components con Vue 3: distribuye un contador con defineCustomElement

Publica un contador Vue como Custom Element con estilos encapsulados y eventos para HTML.
Tailwind CSS 4 con Vue CLI: guía para proyectos existentes

Tailwind CSS 4 con Vue CLI: guía para proyectos existentes

Mantén un proyecto existente con Vue CLI y compila Tailwind 4 sin desactivar la optimización de producción.