import pyotp def verify_totp(secret, code): """valid_window=1 : tolère un léger décalage d'horloge entre le serveur et le téléphone (accepte aussi le code de la période précédente/suivante, ±30s) — sans quoi une horloge un peu désynchronisée suffirait à rendre la 2FA injouable.""" code = (code or "").strip() if not code: return False return pyotp.TOTP(secret).verify(code, valid_window=1)