{"id":22026073,"url":"https://github.com/curiouslearner/django-phone-verify","last_synced_at":"2025-05-15T10:01:36.264Z","repository":{"id":35059689,"uuid":"170570587","full_name":"CuriousLearner/django-phone-verify","owner":"CuriousLearner","description":"A Django app to support phone number verification using security code / One-Time-Password (OTP) sent via SMS.","archived":false,"fork":false,"pushed_at":"2025-05-08T15:45:38.000Z","size":223,"stargazers_count":270,"open_issues_count":11,"forks_count":63,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-05-10T19:03:06.901Z","etag":null,"topics":["2fa","django","hacktoberfest","nexmo","one-time-password","otp","phone-number-verification","phone-verification","phone-verification-code","phone-verification-system","sms","twilio"],"latest_commit_sha":null,"homepage":"https://www.sanyamkhurana.com/django-phone-verify/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CuriousLearner.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":"docs/contributing.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-13T19:57:53.000Z","updated_at":"2025-04-10T12:17:29.000Z","dependencies_parsed_at":"2023-02-12T09:00:43.528Z","dependency_job_id":"5c98cc6b-1b6e-4f45-a190-8051bdfd5a1c","html_url":"https://github.com/CuriousLearner/django-phone-verify","commit_stats":{"total_commits":61,"total_committers":11,"mean_commits":5.545454545454546,"dds":0.5901639344262295,"last_synced_commit":"f516957be02fb693ca074bd2f7ee4121e1c99ba7"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CuriousLearner%2Fdjango-phone-verify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CuriousLearner%2Fdjango-phone-verify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CuriousLearner%2Fdjango-phone-verify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CuriousLearner%2Fdjango-phone-verify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CuriousLearner","download_url":"https://codeload.github.com/CuriousLearner/django-phone-verify/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254319715,"owners_count":22051072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2fa","django","hacktoberfest","nexmo","one-time-password","otp","phone-number-verification","phone-verification","phone-verification-code","phone-verification-system","sms","twilio"],"created_at":"2024-11-30T07:25:07.117Z","updated_at":"2025-05-15T10:01:35.559Z","avatar_url":"https://github.com/CuriousLearner.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"django-phone-verify\n===================\n\n.. image:: https://github.com/CuriousLearner/django-phone-verify/actions/workflows/main.yml/badge.svg?branch=master\n    :target: https://github.com/CuriousLearner/django-phone-verify/actions/workflows/main.yml\n\n.. image:: https://coveralls.io/repos/github/CuriousLearner/django-phone-verify/badge.svg?branch=master\n    :target: https://coveralls.io/github/CuriousLearner/django-phone-verify?branch=master\n\n.. image:: https://img.shields.io/pypi/l/django-phone-verify\n    :target: https://pypi.python.org/pypi/django-phone-verify/\n    :alt: License\n\n.. image:: https://static.pepy.tech/badge/django-phone-verify?period=total\u0026units=international_system\u0026left_color=black\u0026right_color=darkgreen\u0026left_text=Downloads\n    :target: https://pepy.tech/project/django-phone-verify\n\n.. image:: https://img.shields.io/badge/Made%20with-Python-1f425f.svg\n    :target: https://www.python.org/\n\n.. image:: https://img.shields.io/badge/Maintained%3F-yes-green.svg\n    :target: https://GitHub.com/CuriousLearner/django-phone-verify/graphs/commit-activity\n\n.. image:: https://badge.fury.io/py/django-phone-verify.svg\n    :target: https://pypi.python.org/pypi/django-phone-verify/\n\n.. image:: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square\n    :target: http://makeapullrequest.com\n\n\n``django-phone-verify`` is a Django app that enables simple phone number verification using a security code sent via SMS.\nIt supports Twilio and Nexmo (Vonage) out of the box and is fully customizable to suit your backend needs.\n\nDocs are available at `https://www.sanyamkhurana.com/django-phone-verify/ \u003chttps://www.sanyamkhurana.com/django-phone-verify/\u003e`_.\n\nFeatures\n--------\n\n- 🔐 Verify phone numbers using SMS security codes\n- 🔧 Supports custom token length and expiration time\n- 🔄 Built-in support for Twilio and Nexmo (Vonage)\n- 🧩 Easily extensible via pluggable backends\n- ✅ Doesn't interfere with your existing ``AUTH_USER_MODEL``\n- 🚀 Ready-to-use API endpoints via Django REST Framework\n- 🛠 Can be used for multiple flows like signup, 2FA, marketing opt-in, etc.\n\nInstallation\n------------\n\nInstall the package with all supported backends:\n\n.. code-block:: shell\n\n    pip install django-phone-verify[all]\n\nOr install with just the backend you need:\n\n.. code-block:: shell\n\n    pip install django-phone-verify[twilio]\n    pip install django-phone-verify[nexmo]\n\nConfiguration\n-------------\n\n1. Add ``phone_verify`` to ``INSTALLED_APPS``:\n\n.. code-block:: python\n\n    INSTALLED_APPS = [\n        ...\n        \"phone_verify\",\n        ...\n    ]\n\n2. Configure ``PHONE_VERIFICATION`` settings:\n\n.. code-block:: python\n\n    PHONE_VERIFICATION = {\n        \"BACKEND\": \"phone_verify.backends.twilio.TwilioBackend\",  # or NexmoBackend\n        \"OPTIONS\": {\n            \"SID\": \"fake\",\n            \"SECRET\": \"fake\",\n            \"FROM\": \"+14755292729\",\n            \"SANDBOX_TOKEN\": \"123456\",\n        },\n        \"TOKEN_LENGTH\": 6,\n        \"MESSAGE\": \"Welcome to {app}! Please use security code {security_code} to proceed.\",\n        \"APP_NAME\": \"Phone Verify\",\n        \"SECURITY_CODE_EXPIRATION_TIME\": 3600,  # in seconds\n        \"VERIFY_SECURITY_CODE_ONLY_ONCE\": False,\n    }\n\n**Note:** To use Nexmo instead of Twilio, change the ``BACKEND`` path to:\n\n.. code-block:: python\n\n    \"BACKEND\": \"phone_verify.backends.nexmo.NexmoBackend\"\n\nand in ``OPTIONS``, use:\n\n.. code-block:: python\n\n    \"KEY\": \"your-nexmo-key\",\n    \"SECRET\": \"your-nexmo-secret\"\n\nUsage\n-----\n\nTo get started using the app and integrating it into your own flow (DRF or non-DRF), check the following documentation:\n\n- 📘 `Getting Started Guide \u003cdocs/getting_started.rst\u003e`_\n- 🔌 `Integration Examples \u003cdocs/integration.rst\u003e`_\n- ⚙️ `Custom Backend Guide \u003cdocs/customization.rst\u003e`_\n- 📮 `API Endpoints Reference \u003cphone_verify/docs/api_endpoints.rst\u003e`_\n\nCompatibility\n-------------\n\n- Python 3.6+\n- Django 2.1+\n- Django REST Framework 3.9+\n\nContributing\n------------\n\nFound a bug? Want to suggest an improvement or submit a patch?\nPull requests are welcome! 🙌 Please check the `contributing guide \u003chttps://github.com/CuriousLearner/django-phone-verify/blob/master/docs/contributing.rst\u003e`_ before you start.\n\nLicense\n-------\n\nThis project is licensed under the **GPLv3** license.\n\nChangelog\n---------\n\nSee the full changelog here:\n📄 `CHANGELOG.rst \u003chttps://github.com/CuriousLearner/django-phone-verify/blob/master/CHANGELOG.rst\u003e`_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcuriouslearner%2Fdjango-phone-verify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcuriouslearner%2Fdjango-phone-verify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcuriouslearner%2Fdjango-phone-verify/lists"}