cuongnx/laravel-flexible-otp
Composer 安装命令:
composer require cuongnx/laravel-flexible-otp
包简介
A flexible OTP (One-Time Password) library for Laravel, supporting multi-purpose configurations, multi-storage (MongoDB/MySQL), resend cooldown, hashing for security, and optional sending via providers like Zalo ZNS, SpeedSMS, or mail.
关键字:
README 文档
README
A powerful and highly flexible One-Time Password (OTP) package for Laravel applications.
✨ Key Features
- Multi-purpose configuration – Define separate OTP settings for different use cases (login, phone verification, password reset, etc.).
- Multi-storage support – Works seamlessly with MySQL or MongoDB.
- Per-purpose cooldown & rate limiting – Prevent abuse with fine-grained control.
- Optional automatic sending – Built-in support for Zalo ZNS, SpeedSMS, Mail, or any custom provider.
- Modern PHP 8+ named arguments – Clean, readable, and type-safe API.
📦 Requirements
- PHP ^8.2
- Laravel ^11.0 or ^12.0
🚀 Installation
composer require cuongnx/laravel-flexible-otp
The package auto-registers its service provider and facade.
⚙️ Configuration
Publish the configuration file (recommended):
php artisan vendor:publish --tag=otp-config
This will create:
config/otp.php
🧩 Create the OTP Model
The package supports both MySQL and MongoDB.
Generate the appropriate model:
php artisan otp:make-model
- If
connectionis set tomongodb→ the model extendsMongoDB\\Laravel\\Eloquent\\Model - Otherwise → the model extends
Illuminate\\Database\\Eloquent\\Model
After generation, update the config:
'model' => App\\Models\\OtpRecord::class, // or the name you chose
🗄 Migration
A migration is included and automatically published. Run:
php artisan migrate
This creates the one_time_passwords table or collection.
🛠 Usage
use Cuongnx\\LaravelFlexibleOtp\\Facades\\Otp; // Generate OTP normal (returns plain token, does not send) $response = Otp::generate('+84123456789'); // Generate OTP with purpose (returns plain token, does not send) $response = Otp::generate('+84123456789', purpose: 'verify_phone'); // Generate and automatically send the OTP $response = Otp::generate( '+84123456789', purpose: 'verify_phone', send: true, provider: 'zalo_zns' // or 'speedsms', 'mail' ); // Validate OTP $result = Otp::validate('+84123456789', '123456', purpose: 'verify_phone'); if ($result->status) { // OTP is valid } // Check validity without consuming $isValid = Otp::isValid('+84123456789', '123456', purpose: 'verify_phone');
🧾 Example Configuration (config/otp.php)
return [ 'validity' => 10, // minutes 'resend_cooldown' => 2, // minutes 'length' => 6, 'type' => 'numeric', 'send_provider' => 'none', // none | mail | zalo_zns | speedsms 'connection' => 'mongodb', // mysql | mongodb 'model' => App\\Models\\OtpRecord::class, 'purposes' => [ 'login' => [ 'type' => 'numeric', 'length' => 4, 'validity' => 5, 'resend_cooldown' => 1, 'send_provider' => 'none', ], 'verify_phone' => [ 'type' => 'alpha_numeric', 'length' => 6, 'validity' => 15, 'resend_cooldown' => 3, ], // Add more purposes as needed ], ];
📩 Automatic OTP Sending
When send: true is passed, the package dispatches an OtpGenerated event.
Create a listener to handle sending:
php artisan make:listener SendOtpListener --event="CuongNX\LaravelFlexibleOtp\Events\OtpGenerated"
Then implement your sending logic inside the handle method.
Quick Start: Generate Ready-to-Use Listener
The package provides a convenient command to create a complete listener with pre-built support for popular providers:
php artisan otp:make-listener
This command generates app/Listeners/SendOtpListener.php with ready-to-use code for:
- SpeedSMS
- Zalo ZNS
You can also specify a custom name:
php artisan otp:make-listener MyCustomOtpSender -f
🧹 Cleaning Expired OTPs
Manually clean expired OTPs:
php artisan otp:clean
Recommended: schedule it in app/Console/Kernel.php:
$schedule->command('otp:clean')->daily();
📄 License
MIT License – see the LICENSE file for details.
cuongnx/laravel-flexible-otp – A flexible, secure, and developer-friendly OTP solution for modern Laravel projects.
cuongnx/laravel-flexible-otp 适用场景与选型建议
cuongnx/laravel-flexible-otp 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 9 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 01 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「mongodb」 「Authentication」 「mysql」 「laravel」 「otp」 「one-time-password」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 cuongnx/laravel-flexible-otp 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 cuongnx/laravel-flexible-otp 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 cuongnx/laravel-flexible-otp 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Dibi is Database Abstraction Library for PHP
Generates Symfony2 documents, forms and CRUD
Automatically logs-in users if they are already authenticated by a remote source. (e.g. environment variable REMOTE_USER)
GraphQL authentication for your headless Craft CMS applications.
Laravel middleware to restrict a site or specific routes using HTTP basic authentication
A package to allow laravel/passport use with mongodb/laravel-mongodb
统计信息
- 总下载量: 9
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 41
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-01-07