jord-jd/laravel-password-exposed-validation-rule

Laravel validation rule that checks if a password has been exposed in a data breach
1,345 90
Install
composer require jord-jd/laravel-password-exposed-validation-rule
Latest Version:v6.1.0
PHP:^7.4||^8.0
Laravel:8 – 13
Older releases:5 · 6 · 7
License:LGPL-3.0-only
Last Updated:Jul 18, 2026
Links: GitHub  ·  Packagist
Maintainer: Jord-JD

🔒 Laravel Password Exposed Validation Rule

This package provides a Laravel validation rule that checks if a password has been exposed in a data breach. It uses the haveibeenpwned.com passwords API via the jord-jd/password_exposed library.

// composer require jord-jd/laravel-password-exposed-validation-rule

use JordJD\LaravelPasswordExposedValidationRule\PasswordNotExposed;

$request->validate([
    'password' => ['required', new PasswordNotExposed()],
]);

Compatibility

  • PHP: 7.4+ and 8.x
  • Laravel: 8.x through 13.x

Installation

To install, just run the following Composer command.

composer require jord-jd/laravel-password-exposed-validation-rule

Please note that this package requires Laravel 8.0 or above.

Usage

The following code snippet shows an example of how to use the password exposed validation rule.

use JordJD\LaravelPasswordExposedValidationRule\PasswordNotExposed;

$request->validate([
    'password' => ['required', new PasswordNotExposed()],
]);

If you wish, you can also set a custom validation message, as shown below.

use JordJD\LaravelPasswordExposedValidationRule\PasswordNotExposed;

$request->validate([
    'password' => ['required', (new PasswordNotExposed())->setMessage('This password is not secure.')],
]);

Backward Compatibility

PasswordExposed remains available as a backwards-compatible alias for PasswordNotExposed.

Testing / Mocking

If you need deterministic tests, you can inject a checker directly or use a resolver.

use JordJD\LaravelPasswordExposedValidationRule\PasswordNotExposed;
use JordJD\PasswordExposed\Interfaces\PasswordExposedCheckerInterface;

$fakeChecker = new class implements PasswordExposedCheckerInterface {
    // Implement interface methods for your test scenario...
};

PasswordNotExposed::resolvePasswordExposedCheckerUsing(function () use ($fakeChecker) {
    return $fakeChecker;
});

Non-string values are left to Laravel's other validation rules, so combine this rule with string when the field must contain text. Objects that implement __toString() are checked normally.

Related Packages

doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

644,549,754 9,698
laravel/framework

The Laravel Framework.

598,760,099 34,966
laravel/tinker

Powerful REPL for the Laravel framework.

507,193,856 7,441
laravel/serializable-closure

Laravel Serializable Closure provides an easy and secure way to serialize closur...

423,477,751 607
nunomaduro/collision

Cli error handling for console/command-line PHP applications.

403,217,078 4,664

Version History

Version Released PHP Laravel License
v6.1.0 ^7.4||^8.0 ^8.0||^9.0||^10.0||^11.0||^12.0||^13.0 LGPL-3.0-only
v6.0.0 ^7.4||^8.0 ^8.0||^9.0||^10.0||^11.0||^12.0 LGPL-3.0-only
v5.0.1 ^7.1||^8.0||8.1 ^5.1||^6.0||^7.0||^8.0||^9.0 LGPL-3.0-only
v5.0.0 ^7.1||^8.0||8.1 ^5.1||^6.0||^7.0||^8.0||^9.0 LGPL-3.0-only
v4.0.0 ^7.1||^8.0||8.1 ^5.1||^6.0||^7.0||^8.0||^9.0 LGPL-3.0-only