728x90
    반응형

     

     

    firebase_config.py

    초기 이름을 main-> 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만 입력하세요.")

    오류나면 Authentication 로그인 방법 확인. 필자는 제공업체 선택이 안되어있었음

     

     

     

     

    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
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기