117. Logging the user in after Signup

npm create vue@latest


이번엔 사용자가 등록한 후 로그인하는 과정을 다룹니다.
사용자 등록은 RegisterForm 컴포넌트에서 처리되며, createUserWithEmailAndPassword 함수를 사용하여 사용자를 생성하고 인증합니다.
계정 생성이 성공하면, 함수의 응답으로 사용자의 자격 증명이 반환됩니다.
이는 userCredentials라는 변수에 저장됩니다.
Firebase SDK를 사용함으로써, 토큰은 자동으로 저장되고 필요한 서비스에 전송됩니다.
예를 들어 Firestore가 이에 해당합니다.

Firebase의 보안 규칙을 변경하여, 인증된 사용자만 데이터베이스에 쓸 수 있도록 했습니다.
따라서 Firebase SDK는 요청과 함께 토큰을 전송합니다.
Firebase 콘솔을 사용하여 사용자를 삭제하고 데이터베이스의 문서를 삭제한 후, 앱에서 새 계정을 등록하여 테스트할 수 있습니다.

이 과정에서 중요한 점은 사용자를 인증 서비스에 등록한 후 데이터베이스에 추가하는 순서입니다.
이 순서를 바꾸면 Firebase가 오류를 발생시킬 것입니다.
추가로 register 함수에 수정을 가하여 사용자가 로그인했는지 추적하기 위해 상태(state)에 불린 값(boolean)을 저장합니다.

Pinia 패키지의 defineStore 함수를 사용하여 새로운 user.ts 스토어 파일을 생성합니다.
이 스토어에서는 사용자가 로그인했는지 여부를 나타내는 user logged in 상태를 false로 초기화합니다.
사용자가 성공적으로 등록된 후 이상태를 true로 업데이트하며, 이를 통해 앱에서 사용자의 인증 상태를 추적할 수 있습니다.
Firebase 콘솔에서 사용자를 삭제하고 앱에서 등록 양식을 다시 제출하여 테스트할 수 있습니다.

src/stores/user.ts
import { defineStore } from 'pinia'
import { ref } from 'vue'

const useUser = defineStore('user', () => {
  const userLoggedIn = ref(false)

  return {
    userLoggedIn
  }
})

export default useUser