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
반응형