tilleuls/forgot-password-bundle
Tilleuls ForgotPasswordBundle is a Symfony bundle that adds secure forgot-password and password-reset flows: request a reset, email a token, validate it, and update credentials with configurable templates, events, and persistence.
First, a reality check: tilleuls/forgot-password-bundle is a Symfony bundle, not a Laravel package. There is no service provider, no config/forgot-password.php, no php artisan vendor:publish. From a Laravel seat, you have three legitimate options: consume it from a Symfony microservice over HTTP, port the three-endpoint pattern into a Laravel controller, or reach for Laravel's built-in Password::sendResetLink instead. The rest of this assessment assumes you're either in a Symfony service or porting the pattern.
To get a working flow:
composer require tilleuls/forgot-password-bundle and register CoopTilleulsForgotPasswordBundle in config/bundles.php.routing.xml) to expose POST /forgot-password/, GET /forgot-password/{token}, POST /forgot-password/{token}.PasswordResetInterface on your user entity — it needs getEmail()/getPassword() (or the identifier property you configure).coop_tilleuls_forgot_password:
user_class: App\Entity\User
password_broker: security.user_password_hasher
token_lifetime: 3600
from_email: [email protected]
Where to look first: DependencyInjection/Configuration.php (full config surface), Controller/ (the three endpoints you're actually shipping), and Event/ (the only real extension point).
First use case: POST /forgot-password/ {"email":"[email protected]"} returns 204 and emails a GET /forgot-password/{token} link; the GET validates the token; POST /forgot-password/{token} {"password":"..."} completes the flow once you've wired the reset listener.
CoopTilleuls\ForgotPasswordBundle\Mailer\MailerInterface and alias it in your services config to replace the built-in Symfony Mailer implementation — useful if you want MJML templates, Postmark, or a queued send.ForgotPasswordRequestedEvent listener that carries the token.PasswordBrokerInterface to look users up from any store (an Eloquent repository behind a thin adapter, an external IAM, etc.) when you don't want Symfony's built-in provider.WebTestCase (or zenstruck/browser) for the three endpoints; from Laravel, hit them as ordinary HTTP Feature tests against a running Symfony service.table not found errors deep inside the request flow. Add the migration before you test anything.password_broker/login path verifies — otherwise the user resets successfully and immediately can't log in.from_email is required. A misconfigured transport surfaces as a 500 on the request endpoint, which is easy to misdiagnose as a token problem.symfony/security-bundle and make installation painful in modern apps.MailerInterface, PasswordBrokerInterface, and route prefix config are the only sane hooks — resist forking controllers.Password::sendResetLink() / Breeze covers the same UX with zero Symfony dependency. Pick this bundle only if the API is genuinely Symfony and you want its opinionated REST contract.How can I help you explore Laravel packages today?