본문 바로가기
카테고리 없음

Quasar with Firebase

by 린타 2024. 1. 15.

1. firebase web app 생성하기

2. firebase 설치하기

$ npm install firebase
$ quasar new boot firebase

 

3. boot/firebase.js 파일 수정하기

import { boot } from 'quasar/wrappers'
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
import { getAuth, onAuthStateChanged } from 'firebase/auth';

import { useAuthStore } from 'stores/auth';

const firebaseConfig = {
  apiKey: "###",
  authDomain: "###",
  projectId: "###",
  storageBucket: "###",
  messagingSenderId: "###",
  appId: "###",
  measurementId: "###",
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
const auth = getAuth(app);

export { auth };

export default boot(async (/* { app, router, ... } */) => {
  const authStore = useAuthStore();
  onAuthStateChanged(auth, user => {
    console.log('### user', user);
    authStore.setUser(user);
  });
});

 

4. quasar.config.js 수정하기

    // app boot file (/src/boot)
    // --> boot files are part of "main.js"
    // https://v2.quasar.dev/quasar-cli-vite/boot-files
    boot: [
      'firebase', // firebase 추가
    ],

 

5. stores/auth.js 파일 생성하기

import { defineStore } from 'pinia';
import { computed, ref } from 'vue';

export const useAuthStore = defineStore('auth', () => {
  const user = ref(null);
  const isAuthenticated = computed(() => !!user.value);

  const setUser = userData => {
    user.value = userData;
    if (userData) {
      user.value = {
        uid: userData.uid,
        photoURL: userData.photoURL,
        displayName: userData.displayName,
        email: userData.email,
        emailVerified: userData.emailVerified,
      };
    } else {
      user.value = null;
    }
  };

  return {
    user,
    isAuthenticated,
    setUser,
  };
});