wotz / laravel-verification-code
A simple way to authenticate a user using a verification code.
Installs: 1 311
Dependents: 0
Suggesters: 0
Security: 0
Stars: 59
Watchers: 6
Forks: 19
Open Issues: 1
Requires
- php: ^8.1|^8.2|^8.3
- illuminate/database: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/notifications: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- adamwojs/php-cs-fixer-phpdoc-force-fqcn: ^2.0
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^5.0|^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.1|^10.0
- squizlabs/php_codesniffer: ^3.6
README
This package makes it possible to authenticate a user via a verification code.
Installation
You can install this package using composer:
composer require wotz/laravel-verification-code
The package will automatically register itself.
You can publish the migration with:
php artisan vendor:publish --provider="Wotz\VerificationCode\VerificationCodeServiceProvider" --tag="migrations"
After publishing the migration, run the migration with:
php artisan migrate
You can publish the config file with:
php artisan vendor:publish --provider="Wotz\VerificationCode\VerificationCodeServiceProvider" --tag="config"
Usage
Generate and send a verification code
use Wotz\VerificationCode\VerificationCode; VerificationCode::send($email);
This will generate a verification code for the user. The code will be stored in the verification_codes
table. An email with the generated code will then be sent to the user matching the given email address.
Verify a verification code
use Wotz\VerificationCode\VerificationCode; VerificationCode::verify($code, $email);
If the verification code is expired or does not match the user's email address, it will return false
. If valid, it will return true
and delete the code.
If you do not want the code to be deleted (in case the same code needs to be verified at different points in the login flow) you can pass a third parameter.
use Wotz\VerificationCode\VerificationCode; VerificationCode::verify($code, $email, $deleteAfterVerification);
Verification codes table cleanup
Since it is possible for the verification codes table to fill up with unused codes, the following command will prune all codes older than the given hours.
php artisan verification-code:prune --hours=24
Config settings
Length
This value defines the length of every generated verification code.
Characters
You can define which characters are used to generate a verification code. By default, certain characters are excluded (0, O, I, L) because they look too similar.
Expire seconds
A verification code is only valid for a certain amount of time. You can define after how many seconds a verification code will expire.
Max codes per verifiable
By default, only one verification code can be active per verifiable. If you want to allow multiple active codes per verifiable, then you can
change this setting to a different number (or to null
if you want unlimited codes per verifiable).
Custom Notification
If you want to use a custom notification to send the verification code, you can create your own notification class which should extend the VerificationCodeCreatedInterface
. Make sure you don't forget to pass the verification code to the mail.
Custom Model
If you want to use a custom verification code model, you can create your own verification code class which should extend the VerificationCode
.
Queue
If your notification is queueable, you can define the queue that will be used for the notification.
Test verifiables and test code
You sometimes may want to allow a user to log in immediately without letting them go through the verification code flow. To do this you can add the verifiable (e.g. email address) to the test_verifiables
array. You then need to define a test_code
. The combination of the verifiable and the test code will make it possible for the user to pass through.
Testing
You can run tests with:
composer test
Linting
composer lint
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Credits
License
The MIT License (MIT). Please see License File for more information.