Download the PHP package mrpunyapal/php-2fa without Composer
On this page you can find all versions of the php package mrpunyapal/php-2fa. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download mrpunyapal/php-2fa
More information about mrpunyapal/php-2fa
Files in mrpunyapal/php-2fa
Package php-2fa
Short Description Framework-agnostic Two-Factor Authentication actions for PHP with optional Laravel support
License MIT
Homepage https://github.com/mrpunyapal/php-2fa
Informations about the package php-2fa
PHP 2FA
Framework-agnostic Two-Factor Authentication (TOTP) actions for PHP. Works with any authenticator app (Google Authenticator, Authy, etc.). Optional first-party Laravel support included.
Inspired by Laravel Fortify and built on top of pragmarx/google2fa.
Features
- Enable / Disable / Confirm 2FA
- Verify OTP codes
- Recovery code generation, verification, and regeneration
- Enable → Confirm flow (user must verify a code before 2FA is active)
- Framework-agnostic core — use with any PHP application
- Optional Laravel integration with service provider, config, and Eloquent trait
- AES-256-CBC encryption out of the box (
OpenSslEncryptor) - Bring your own encryptor via the
Encryptorcontract
Requirements
- PHP 8.3+
- OpenSSL extension
Installation
Laravel
The service provider is auto-discovered. Publish the config:
Quick Start (Vanilla PHP)
1. Implement TwoFactorUser on your user entity
See docs/examples/php/setup-two-factor.php for a full PDO-backed implementation.
2. Use TwoFactorManager
Using Individual Actions
If you prefer dependency injection or want granular control:
Laravel Usage
Add the trait to your User model
Add the required columns
Inject actions or manager
Batch saves with withoutSaving()
By default, each setter on the HasTwoFactorAuthentication trait persists immediately. To batch multiple field changes into a single DB write:
Examples
Full working examples are available in the docs/examples/ directory.
Laravel Examples
| File | Description |
|---|---|
| TwoFactorController.php | Controller with enable, confirm, verify, disable, and regenerate actions |
| EnsureTwoFactorVerified.php | Middleware that requires 2FA verification before accessing protected routes |
| routes.php | Route definitions with proper middleware stacking |
| two-factor-verify.blade.php | Blade view for OTP / recovery code input |
| migration.php | Migration to add 2FA columns to users table |
PHP Examples
| File | Description |
|---|---|
| setup-two-factor.php | Full setup flow with PDO-backed TwoFactorUser implementation |
| login-with-two-factor.php | Session-based login flow with 2FA challenge |
| manage-recovery-codes.php | Regenerate, display, and verify recovery codes |
| qr-code-display.php | Render QR codes using Google Charts, chillerlan/php-qrcode, or endroid/qr-code |
| custom-encryptor.php | Custom Encryptor implementation using Sodium (libsodium) |
Configuration
Custom Encryptor
Implement the Encryptor contract to use your own encryption strategy:
Then pass it to the actions or bind it in Laravel's container. See docs/examples/php/custom-encryptor.php for a complete Sodium-based implementation.
API Reference
Actions
| Action | Purpose |
|---|---|
EnableTwoFactorAuthentication |
Generates secret + recovery codes, stores encrypted on user |
DisableTwoFactorAuthentication |
Clears all 2FA fields on user |
ConfirmTwoFactorAuthentication |
Verifies OTP code and sets confirmed timestamp |
VerifyTwoFactorCode |
Verifies OTP or recovery code, replaces used recovery codes |
GenerateRecoveryCodes |
Generates new set of recovery codes |
Exceptions
| Exception | When |
|---|---|
InvalidOtpException |
OTP code verification fails during confirmation |
TwoFactorNotEnabledException |
Action requires 2FA to be enabled but it isn't |
EncryptionException |
Encryption or decryption operation fails |
Testing
Credits
- Mr Punyapal
- All Contributors
License
The MIT License (MIT). Please see License File for more information.