[PasswordHasher] Use sodium as "best" hasher if with algorithm=auto #41646
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.
According to the docs, setting
password_hashers.xxx.algorithm=auto
should prefer Sodium to native (bcrypt) if available:But this is not what's actually happening. New passwords are hashed with bcrypt (
$2y$
) instead of Argon2ID ($argon2id$
). TheMigratingPasswordHasher
gets an instance ofNativePasswordHasher
instead ofSodiumPasswordHasher
as first parameter ($bestHasher
).I think this is a simple mixup and the fix seems easy enough.
But I haven't found a good way to write a test for it:
MigratingPasswordHasher
to run an assertion on itPasswordHasherFactory::getHasherConfigFromAlgorithm
is private, otherwise I could simply test its outputI'm open for ideas. Or can we merge the fix without a test?