Update dependency gesdinet/jwt-refresh-token-bundle to v3 - #10537
Open
renovate[bot] wants to merge 1 commit into
Open
Update dependency gesdinet/jwt-refresh-token-bundle to v3#10537renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/gesdinet-jwt-refresh-token-bundle-3.x
branch
2 times, most recently
from
August 16, 2026 17:04
a36be58 to
6a45562
Compare
Contributor
|
The migrations are here: https://github.com/BacLuc/ecamp3/compare/renovate-gesdinet |
renovate
Bot
force-pushed
the
renovate/gesdinet-jwt-refresh-token-bundle-3.x
branch
5 times, most recently
from
August 21, 2026 11:44
2a012b0 to
ec22a6f
Compare
renovate
Bot
force-pushed
the
renovate/gesdinet-jwt-refresh-token-bundle-3.x
branch
4 times, most recently
from
August 27, 2026 03:20
adafbb5 to
8ec064e
Compare
renovate
Bot
deleted the
renovate/gesdinet-jwt-refresh-token-bundle-3.x
branch
August 30, 2026 17:45
renovate
Bot
force-pushed
the
renovate/gesdinet-jwt-refresh-token-bundle-3.x
branch
3 times, most recently
from
August 31, 2026 18:20
8e3701f to
58e1344
Compare
renovate
Bot
force-pushed
the
renovate/gesdinet-jwt-refresh-token-bundle-3.x
branch
2 times, most recently
from
September 1, 2026 12:42
58e1344 to
3c60083
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.2.2→3.0.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
markitosgv/JWTRefreshTokenBundle (gesdinet/jwt-refresh-token-bundle)
v3.0.0Compare Source
See UPGRADE-3.0.md for what to check before upgrading, and
UPGRADE-RECTOR.md if you are coming from further back than 2.2.
This release needs a schema change before the application will run. Refresh tokens gained
familyandfamily_validcolumns, and Doctrine reads every mapped field.Added
Model\FamilyAwareRefreshTokenInterfaceandModel\RefreshTokenFamilyTrait, separate fromRefreshTokenInterfaceso a token class of your own is untouched.Model\FamilyRefreshTokenManagerInterface::revokeFamily()revokes a whole chainreuse_detection, which recognises a single use refresh token being presented after it was spent and revokes the chain it belonged to. Rotation alone leaves a stolen token working until the legitimate client happens to refresh, and nobody learns why it broke; a spent token is deleted, so a replay is indistinguishable from any other unknown token unless spent ones are remembered. Off by default, refused withoutsingle_use, and it dispatchesRefreshTokenReuseDetectedEventbecause the bundle cannot tell theft from a client racing itselfmax_session_lifetime, a ceiling on how long a chain of refreshes may go on for, whateverttlsays. A ttl that starts over on every rotation means a session never ends. The deadline is set when a chain starts and carried along it unchangedblock_jwts_on_revocation, which refuses the JWTs already issued to a user whenrevokeAllForUser()takes their refresh tokens away. Lexik's blocklist cannot do this — it is keyed byjti, so it withdraws a token you are holding, and these are in clients — so what is recorded is when the revocation happened, per user, and any JWT issued at or before it is refused on decoderate_limiter, bounding how often the refresh endpoint will answer. Consumed before the token is looked at, so a refusal costs no query and its timing says nothing about whether the token exists. Refused requests answer429withRetry-After. Keyed by IP or by token, which is a trade-off rather than a detail. Needssymfony/rate-limiterSession\SessionLister, for showing a user where they are signed in and letting them end one. Grouping by chain is what turnsfindAllForUser()from a list of moments into a list of sessions.end()checks the chain belongs to the caller, since a session list is exactly where such an identifier gets handed outcache_pool, storing the tokens in a PSR-6 pool instead of a database. Expiry is then the pool's job, so nothing has to be scheduled to clear them. It implements only what a pool can honour, andmax_tokens_per_userandreuse_detectionare configuration errors alongside it rather than options that quietly do nothingttl,ttl_update,token_parameter_name,single_use,single_use_ttl_update,max_session_lifetime,max_tokens_per_user,return_expirationandreturn_expiration_parameter_nameon therefresh_jwtauthenticator. Every one defaults to null, meaning "whatever the bundle says", which is not the same as defaulting to its current value. Cookie settings stay globalblock_previous_jwt, which blocks the JWT a refresh replaces through LexikJWTAuthenticationBundle 3's blocklist, so refreshing no longer leaves the previous JWT usable for the rest of its lifetime. A request carrying no JWT, and a JWT that no longer parses, are left alone: an expired one is refused everywhere already. Off by default, and reported at compile time when Lexik'sblocklist_tokenis not onrector/sets, with the upgrade path in UPGRADE-RECTOR.md. Only the 1.5 to 2.0 set rewrites anything; the other three are empty and say whyChanged
check_pathis required on therefresh_jwtauthenticator. It defaulted to/login_check, Lexik's login path, which is never right for a refresh endpoint: left alone the authenticator took no requests and the router reported the refresh route as having no controllerRefreshEventtakes the request the refresh was made with, and$firewallNameloses its default. Listeners gaingetRequest(); only code constructing the event is affectedquoteIdentifier()andsetPrimaryKey()dbal_columns, when configured, has to name theidcolumn. A map without one produced a table whose expired tokens could never be revoked: batches are deleted by identifier, so with none to delete by,gesdinet:jwt:clearread the same batch foreverfinal. The token models,AbstractRefreshTokenand the two repositories are deliberately left extendable, being the documented way to bring your ownstrict_types, so the calls this bundle makes pass their arguments without coercionrector.phpand.php-cs-fixer.phpnow keep it that way.rector/rectorhad been a development dependency for a long time with nothing configured to run itFixed
UNIQ_REFRESH_TOKEN,IDX_USERNAMEandIDX_VALIDwere fixed whatever the table was called, and index names are scoped to the schema on PostgreSQL and to the whole database on SQLite — so a second table managed by the bundle could not be created, and the error named an index rather than anything identifying this bundle. Existing tables are untouched, since the schema is only built when absentSession\SessionListerkeys chains byarray-keyrather thanstring. A family is 32 hex characters, and PHP turns one that happens to be all digits into an integer keyRefreshTokenFamilyTraitthat stopped psalm's taint analysis reasoning about where a family came from, and four array shapes that were sealed promises about keys the method never looks at. The rest are by design or belong to Symfony, Doctrine and API Platform, and are suppressed inpsalm.xml.distscoped to the files they concern, each with the reasonConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.