728x90
    반응형

    목표


    앱 실행 시 로그인 후:
    Firestore users/{uid}에서 deviceLimits[appId]를 읽어 해당 앱의 최대 허용 기기 수 확인
    users/{uid}/devices_{appId}에 등록된 기기 수 확인
    제한 이내면 현재 기기를 등록 후 사용 허용
    제한 초과 시 로그인 차단 및 안내 출력

     

    # main_device_register.py
    
    from firebase_config import auth
    from firestore_client import db
    import getpass
    import datetime
    import socket
    import random
    import string
    
    def generate_device_id():
        hostname = socket.gethostname()
        rand_suffix = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5))
        return f"{hostname}_{rand_suffix}"
    
    def sign_in_and_register_device(app_id):
        email = input("로그인 이메일: ")
        password = getpass.getpass("로그인 비밀번호: ")
    
        try:
            user = auth.sign_in_with_email_and_password(email, password)
            print("✅ 로그인 성공:", user['email'])
    
            id_token = user['idToken']
            account_info = auth.get_account_info(id_token)
            uid = account_info['users'][0]['localId']
    
            user_ref = db.collection("users").document(uid)
            user_doc = user_ref.get()
            if not user_doc.exists:
                print("❌ Firestore에 사용자 정보가 없습니다.")
                return
    
            user_data = user_doc.to_dict()
            device_limits = user_data.get("deviceLimits", {})
            max_devices = device_limits.get(app_id, 1)
    
            devices_ref = user_ref.collection(f"devices_{app_id}")
            devices = devices_ref.stream()
            devices_list = [d.id for d in devices]
            device_count = len(devices_list)
    
            print(f"📊 현재 {app_id} 등록 기기 수: {device_count}/{max_devices}")
    
            device_id = generate_device_id()
    
            if device_id in devices_list:
                print(f"✅ 현재 기기({device_id})는 이미 등록되어 있어 사용 가능.")
            elif device_count < max_devices:
                device_name = input("등록할 기기명을 입력하세요: ").strip()
                now = datetime.datetime.utcnow()
                devices_ref.document(device_id).set({
                    "deviceName": device_name,
                    "registeredAt": now,
                    "lastPing": now
                })
                print(f"✅ 현재 기기({device_id})를 '{device_name}'로 등록 완료, 사용 가능.")
            else:
                print("❌ 기기 등록 수가 제한을 초과하여 사용이 차단되었습니다.")
                print(f"등록된 기기 목록: {devices_list}")
                print("앱 내에서 사용하지 않는 기기를 해제한 후 다시 시도해 주세요.")
    
        except Exception as e:
            print("❌ 로그인/기기 등록 실패:", e)
    
    if __name__ == "__main__":
        app_id = input("앱 ID 입력 (예: appA, appB): ").strip()
        sign_in_and_register_device(app_id)
    728x90
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기