Estoy trabajando en un proyecto nuxt y uso el módulo @nuxt/firebase para iniciar/cerrar sesión del usuario y funciona bien.
Ahora estoy tratando de verificar el token de identificación cuando un usuario visita la página de administración y hacer algo dependiendo del resultado, pero estoy atascado en hacer que funcione el método de verificar el token.
No puedo acceder a nuxt.$fire.auth (puedo en mis complementos, por ejemplo), pensé que es porque esto se ejecuta en el servidor, así que tuve que importar los paquetes, pero no estoy seguro de que esta sea la forma óptima.
Configuré nuxt.config.js para usar un módulo llamado auth.js
modules/auth /
import cookie from "cookie"; import { initializeApp, applicationDefault } from "firebase-admin/app"; import { getAuth } from "firebase-admin/auth"; export default function () { const { nuxt } = this; nuxt.hook("render:setupMiddleware", (app) => { app.use("/admin", handler); }); const handler = (req, res, next) => { const idToken = cookie.parse(req.headers.cookie)["idToken"]; const fireAuth = initializeApp({ credential: applicationDefault(), projectId: "testApp", }); getAuth(fireAuth) .verifyIdToken(idToken) .then((decodedToken) => { console.log(decodedToken); }) .catch((error) => { // Handle error }); next(); }; }Esto funciona por primera vez que visito la página. Si vuelvo a cargar, me da el error de que una aplicación de Firebase ya está inicializada.
The default Firebase app already exists. This means you called initializeApp() more than once without providing an app name as the second argument. In most cases you only need to call initializeApp() once. But if you do want to initialize multiple apps, pass a second argument to initializeApp() to give each app a unique name.
No sé cómo poner una cláusula de protección para ver si la aplicación ya está inicializada. Además, siento que este no es el mejor enfoque.