@@ -226,6 +226,60 @@ After configuring the correct algorithm, you can use the
226
226
throw new \Exception('Bad credentials, cannot delete this user.');
227
227
}
228
228
229
+ Injecting a Specific Password Hasher
230
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
231
+
232
+ In some cases, you might define a password hasher in your configuration that is
233
+ not linked to a user entity but is instead identified by a unique key.
234
+ For example, you might have a separate hasher for things like password recovery
235
+ codes.
236
+
237
+ With the following configuration:
238
+
239
+ .. code-block :: yaml
240
+
241
+ # config/packages/security.yaml
242
+ security :
243
+ password_hashers :
244
+ recovery_code : ' auto'
245
+
246
+ firewalls :
247
+ # ...
248
+
249
+ It is possible to inject the recovery_code password hasher into any service.
250
+ To do this, you can't rely on standard autowiring, as Symfony wouldn't know
251
+ which specific hasher to provide.
252
+
253
+ Instead, you can use the ``#[Target] `` attribute to request the hasher by its
254
+ configuration key::
255
+
256
+ // src/Controller/HomepageController.php
257
+ namespace App\Controller;
258
+
259
+ use Symfony\Component\DependencyInjection\Attribute\Target;
260
+ use Symfony\Component\PasswordHasher\PasswordHasherInterface;
261
+
262
+ class HomepageController extends AbstractController
263
+ {
264
+ public function __construct(
265
+ #[Target('recovery_code')]
266
+ private readonly PasswordHasherInterface $passwordHasher,
267
+ ) {
268
+ }
269
+
270
+ #[Route('/')]
271
+ public function index(): Response
272
+ {
273
+ $plaintextToken = 'some-secret-token';
274
+
275
+ // Note: use hash(), not hashPassword(), as we are not using a UserInterface object
276
+ $hashedToken = $this->passwordHasher->hash($plaintextToken);
277
+ }
278
+ }
279
+
280
+ When injecting a specific hasher by its name, you should type-hint the generic
281
+ :class: `Symfony\\ Component\\ PasswordHasher\\ PasswordHasherInterface `.
282
+
229
283
Reset Password
230
284
--------------
231
285
0 commit comments