A Django app to support phone number verification using security code sent via SMS.
Project description
django-phone-verify is a Django app that enables simple phone number verification using a security code sent via SMS. It supports Twilio and Nexmo (Vonage) out of the box and is fully customizable to suit your backend needs.
Docs are available at https://www.sanyamkhurana.com/django-phone-verify/.
Features
🔐 Verify phone numbers using SMS security codes
🔧 Supports custom token length and expiration time
🔄 Built-in support for Twilio and Nexmo (Vonage)
🧩 Easily extensible via pluggable backends
✅ Doesn’t interfere with your existing AUTH_USER_MODEL
🚀 Ready-to-use API endpoints via Django REST Framework
🛠 Can be used for multiple flows like signup, 2FA, marketing opt-in, etc.
Installation
Install the package with all supported backends:
pip install django-phone-verify[all]
Or install with just the backend you need:
pip install django-phone-verify[twilio]
pip install django-phone-verify[nexmo]
Configuration
Add phone_verify to INSTALLED_APPS:
INSTALLED_APPS = [
...
"phone_verify",
...
]
Configure PHONE_VERIFICATION settings:
PHONE_VERIFICATION = {
"BACKEND": "phone_verify.backends.twilio.TwilioBackend", # or NexmoBackend
"OPTIONS": {
"SID": "fake",
"SECRET": "fake",
"FROM": "+14755292729",
"SANDBOX_TOKEN": "123456",
},
"TOKEN_LENGTH": 6,
"MESSAGE": "Welcome to {app}! Please use security code {security_code} to proceed.",
"APP_NAME": "Phone Verify",
"SECURITY_CODE_EXPIRATION_TIME": 3600, # in seconds
"VERIFY_SECURITY_CODE_ONLY_ONCE": False,
}
Note: To use Nexmo instead of Twilio, change the BACKEND path to:
"BACKEND": "phone_verify.backends.nexmo.NexmoBackend"
and in OPTIONS, use:
"KEY": "your-nexmo-key",
"SECRET": "your-nexmo-secret"
Usage
To get started using the app and integrating it into your own flow (DRF or non-DRF), check the following documentation:
Compatibility
Python 3.6+
Django 2.1+
Django REST Framework 3.9+
Contributing
Found a bug? Want to suggest an improvement or submit a patch? Pull requests are welcome! 🙌 Please check the contributing guide before you start.
License
This project is licensed under the GPLv3 license.
Changelog
See the full changelog here: 📄 CHANGELOG.rst