Skip to content

[raiffeisen-business-rs] переиспользование сессии, чтобы не запрашивать 2FA при каждой синхронизации#1040

Open
d-lef wants to merge 1 commit into
zenmoney:masterfrom
d-lef:fix/raiffeisen-business-rs-session-reuse
Open

[raiffeisen-business-rs] переиспользование сессии, чтобы не запрашивать 2FA при каждой синхронизации#1040
d-lef wants to merge 1 commit into
zenmoney:masterfrom
d-lef:fix/raiffeisen-business-rs-session-reuse

Conversation

@d-lef
Copy link
Copy Markdown

@d-lef d-lef commented May 17, 2026

После того как #1009 был замёржен, плагин работает, но банк требует подтверждение push 2FA в мобильном приложении при каждой синхронизации, потому что GetLegalEntities всегда возвращает ForceSecondLogin: true и плагин каждый раз заново проходит полный логин.

Closes #1039.

Что сделано

  • index.ts — после успешного логина cookies каждой legal entity сохраняются через ZenMoney.setData('sessions', ...). В начале следующей синхронизации плагин пробует сразу вызвать fetchAllAccounts с сохранёнными cookies; если запрос проходит — весь логин (getTicket → getLegalEntities → push 2FA → setLegalEntity) пропускается. Если сохранённая сессия истекла — откат к обычному полному логину (одно подтверждение 2FA), и новые cookies сохраняются.
  • models.ts — добавлен тип LegalEntitySession для сохраняемой структуры.

Cookies сессии у банка живут достаточно долго, так что обычные синхронизации в течение дня не должны вообще требовать подтверждения в приложении.

Тестирование

  • ts-standard — без ошибок
  • tsc --noEmit — без ошибок
  • Существующие unit-тесты raiffeisen-business-rs проходят
  • Боевой тест с реальным банком:
    • Фаза 1 (полный логин): получен ticket, прошла push 2FA, SetLegalEntityWeb вернул cookies, fetchAllAccounts успешно получил счета
    • Фаза 2 (имитация следующей синхронизации с сохранёнными cookies, без новых credentials): fetchAllAccounts успешно получил те же 2 счёта без запроса 2FA в мобильном приложении

…quent syncs

Closes zenmoney#1039. The bank sets ForceSecondLogin=true on every login, so each
sync previously required a push-app approval. Save each legal entity's
session cookie via ZenMoney.setData/getData after a successful login, try
fetchAllAccounts with the saved cookies on the next sync, and fall back to
the full login flow (including 2FA) only when the saved session has expired.
@d-lef d-lef changed the title [raiffeisen-business-rs] persist session cookies to skip 2FA on subsequent syncs [raiffeisen-business-rs] переиспользование сессии, чтобы не запрашивать 2FA при каждой синхронизации May 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant