Phone Verification via Symfony Notifier SMS Channel
Signing in or signing up on a modern website or mobile app typically follows these steps:
- A user initiates verification by submitting a phone number
- The user receives an SMS or a call with a one-time password (OTP)
- The user completes verification by submitting the OTP
This library is built on top of alexeygeno/phone-verification-php and allows to set this up
- Easy switching between different storages and SMS services
- Configurable length and expiration time for OTP
- Configurable rate limits
- Localization
- Usage with dependency injection and console commands
- Flex recipe for quick start
- Symfony 6.x
- Any of the SMS services available in Symfony Notifier SMS Channel: symfony/vonage-notifier, symfony/twilio-notifier, symfony/message-bird-notifier and many more
- Any of the supported storages: snc/redis-bundle, doctrine/mongodb-odm-bundle
composer require alexgeno/phone-verification-bundle snc/redis-bundle predis/predis symfony/vonage-notifier
Note: Redis as a storage and Vonage as an SMS service are defaults in the configuration
public function initiate(\AlexGeno\PhoneVerification\Manager\Initiator $manager)
{
$manager->initiate('+15417543010');
}
public function complete(\AlexGeno\PhoneVerification\Manager\Completer $manager)
{
$manager->complete('+15417543010', 1234);
}
bin/console phone-verification:initiate --to=+15417543010
bin/console phone-verification:complete --to=+15417543010 --otp=1234
curl -X POST localhost/phone-verification/initiate/+15417543010
{"ok":true,"message":"Sms has been sent. Check your Phone!"}
curl -X POST localhost/phone-verification/complete/+15417543010/1234
{"ok":true,"message":"The verification is done!"}
The bundle will be automatically enabled and configured by a Flex recipe. In case you don't use Flex, see docs/CONFIGURATION.md on how to manually do it
To switch between available storages and SMS services, install the respective package and update the configuration. For example, to use Mongodb as a storage and Twilio as an SMS service:
composer require doctrine/mongodb-odm-bundle symfony/twilio-notifier
alex_geno_phone_verification:
storage:
driver: mongodb
# ...
sender:
transport: twilio
# ...
If the available options are not sufficient, you can add a custom storage (implementing \AlexGeno\PhoneVerification\Storage\I) or/and a sender (implementing \AlexGeno\PhoneVerification\Sender\I), and decorate the respective services (alex_geno_phone_verification.sender, alex_geno_phone_verification.storage) with them
Note: if you use Mongodb as a storage take a look at docs/MIGRATIONS.md