Repository navigation
Release v1.21.0
Release v1.21.0
Changelog
Fixed
- FrankenPHP worker mode without kernel reset (see FRANKENPHP-WORKER-AUDIT.md):
- QR login:
QrLoginChallengeManager::find()now reads the challenge withQuery::HINT_REFRESH(QrLoginChallengeRepository::findFresh()), so a worker never decides on a stale identity-map copy.approve(),deny(),consume()and the expiry check move the status with an atomic conditionalUPDATE … WHERE status = :expected; a lost race throws the newQrLoginChallengeConflictException(approve/deny answer409, complete redirects to login without logging in). A challenge can only be consumed once across workers. - Password reset: the code flow refreshes the user before comparing the stored hash/expiry, and the link-token lookup uses
Query::HINT_REFRESH.PasswordResetUserResolver/MagicLoginUserResolveralsorefresh()managed users after lookup. - Social login: credential and account lookups use
Query::HINT_REFRESH;SocialAccountLinkerrefreshes linked/matched users before login. OAuth token and userinfo calls set explicittimeout(10 s) andmax_duration(20 s); override the$timeout/$maxDurationarguments ofOAuth2Clientto change them. - Failed flushes no longer leave a closed EntityManager for the rest of the worker's life: the new
EntityManagerRecoveryservice resets closed managers throughManagerRegistrybefore rethrowing (registration, password reset, social login, QR login). - Registration: a unique constraint violation on flush is converted to a
RuntimeException, soRegisterControllerredirects instead of returning a 500. auth_kit_dropdown/AuthEmbedContextFactoryonly trusts the security token when the main request is behind a firewall with security enabled, so a token left over from a previous request is never rendered on public pages.
- QR login:
Added
- FRANKENPHP-WORKER-AUDIT.md — audit under scenario B (kernel not reset between requests).
Doctrine\EntityManagerRecovery,QrLoginChallengeConflictException,QrLoginChallengeRepository::findFresh()/transitionStatus().
Full Changelog: v1.20.1...v1.21.0