728x90
반응형
firebase_config.py
main_auth_test.py
from firebase_config import auth
import getpass
def sign_up():
email = input("가입할 이메일: ")
password = getpass.getpass("가입할 비밀번호 (콘솔에 안 보임): ")
try:
user = auth.create_user_with_email_and_password(email, password)
print("✅ 회원가입 성공:", user['email'])
except Exception as e:
print("❌ 회원가입 실패:", e)
def sign_in():
email = input("로그인 이메일: ")
password = getpass.getpass("로그인 비밀번호 (콘솔에 안 보임): ")
try:
user = auth.sign_in_with_email_and_password(email, password)
print("✅ 로그인 성공:", user['email'])
print("ID Token:", user['idToken'][:40], "...") # 확인용 일부 출력
return user
except Exception as e:
print("❌ 로그인 실패:", e)
return None
if __name__ == "__main__":
mode = input("회원가입은 1, 로그인은 2 입력: ")
if mode == "1":
sign_up()
elif mode == "2":
user = sign_in()
else:
print("1 또는 2만 입력하세요.")
Firestore에 로그인 사용자 정보 저장(users/{uid})
다운받은 파일명 변경: serviceAccountKey.json
파이썬 루트폴더로 이동
firestore_client.py
# firestore_client.py
import firebase_admin
from firebase_admin import credentials, firestore
# 서비스 계정 키 경로
cred = credentials.Certificate("serviceAccountKey.json")
# 앱 초기화 (이미 초기화 되어있으면 예외 방지)
try:
firebase_admin.initialize_app(cred)
except ValueError:
pass
# Firestore 클라이언트
db = firestore.client()
# main_auth_test.py 수정
from firebase_config import auth
from firestore_client import db
import getpass
import datetime
def sign_up():
email = input("가입할 이메일: ")
password = getpass.getpass("가입할 비밀번호: ")
try:
user = auth.create_user_with_email_and_password(email, password)
print("✅ 회원가입 성공:", user['email'])
except Exception as e:
print("❌ 회원가입 실패:", e)
def sign_in():
email = input("로그인 이메일: ")
password = getpass.getpass("로그인 비밀번호: ")
try:
user = auth.sign_in_with_email_and_password(email, password)
print("✅ 로그인 성공:", user['email'])
# JWT에서 UID 추출
id_token = user['idToken']
account_info = auth.get_account_info(id_token)
uid = account_info['users'][0]['localId']
# Firestore에 사용자 정보 저장
user_ref = db.collection("users").document(uid)
now = datetime.datetime.utcnow()
user_doc = user_ref.get()
if user_doc.exists:
# 기존 유저: lastLogin 업데이트
user_ref.update({
"lastLogin": now
})
print("📄 기존 사용자 lastLogin 업데이트 완료")
else:
# 신규 유저: 정보 등록
user_ref.set({
"email": email,
"createdAt": now,
"lastLogin": now
})
print("📄 신규 사용자 정보 Firestore 등록 완료")
return user
except Exception as e:
print("❌ 로그인 실패:", e)
return None
if __name__ == "__main__":
mode = input("회원가입은 1, 로그인은 2 입력: ")
if mode == "1":
sign_up()
elif mode == "2":
user = sign_in()
else:
print("1 또는 2만 입력하세요.")
728x90
반응형