Skip to main content

A Django app to support phone number verification using security code sent via SMS.

Project description

https://github.com/CuriousLearner/django-phone-verify/actions/workflows/main.yml/badge.svg?branch=master https://coveralls.io/repos/github/CuriousLearner/django-phone-verify/badge.svg?branch=master License https://static.pepy.tech/badge/django-phone-verify?period=total&units=international_system&left_color=black&right_color=darkgreen&left_text=Downloads https://img.shields.io/badge/Made%20with-Python-1f425f.svg https://img.shields.io/badge/Maintained%3F-yes-green.svg https://badge.fury.io/py/django-phone-verify.svg https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square

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

  1. Add phone_verify to INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    "phone_verify",
    ...
]
  1. 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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page