Skip to main content

Mango-JWT

Mango-JWT is a minimal JWT User Authentication tool for Django Rest Framework and MongoDB. Recommended for developers using django-rest-framework and pymongo. Not supported in versions below Django 2.0.

pip install mango-jwt

Quick start

  1. Add “mongo_auth” to your INSTALLED_APPS setting below “rest_framework”:

    INSTALLED_APPS = [
        ...
        'rest_framework',
        'mongo_auth',
    ]
  2. Include the mongo_auth URLconf in your project urls.py like this:

    path('mongo_auth/', include('mongo_auth.urls')),
  3. Add DB config in settings.py :-

    # Minimal settings (all mandatory)
    MANGO_JWT_SETTINGS = {
        "db_host": "some_db_host", # Use srv host if connecting with MongoDB Atlas Cluster
        "db_port": "some_db_port", # Don't include this field if connecting with MongoDB Atlas Cluster
        "db_name": "for_example_auth_db",
        "db_user": "username",
        "db_pass": "password"
    }
    
    
    # Or use Advanced Settings (including optional settings)
    MANGO_JWT_SETTINGS = {
        "db_host": "some_db_host",
        "db_port": "some_db_port",
        "db_name": "for_example_auth_db",
        "db_user": "username",
        "db_pass": "password",
        "auth_collection": "name_your_auth_collection", # default is "user_profile"
        "fields": ("email", "password"), # default
        "jwt_secret": "secret", # default
        "jwt_life": 7, # default (in days)
        "secondary_username_field": "mobile" # default is None
    }

PLEASE NOTE: If you are connecting MongoDB Atlas Cluster, don’t include “db_port” and use srv host in “db_host” e.g. if your host is showing mongodb+srv://something.mongodb.net/test in your account, then use “something.mongodb.net” as your host.

  1. If secondary_username_field is provided, users will be able to login with this field as well as “email”. This is best for scenarios where you want users to login with either of their unique fields.

    For example, you may want users to login with “email” or “mobile”.

  2. You may or may not include “secondary_username_field” in “fields”.

    Note: “secondary_username_field” cannot be “email” as its “primary_username” and “secondary_username_field” will be set to None instead.

  3. Make a POST request on http://127.0.0.1:8000/mongo_auth/signup/ with body as :-

    {
        "email": "some_email@email.com",
        "password": "some_password",
        other_fields
        ...
    }
  4. Now login with these credentials at http://127.0.0.1:8000/mongo_auth/login/ :-

    {
        "username": "some_email@email.com or secondary_username_field_value",
        "password": "some_password"
    }
  5. This will return a JWT. Pass this JWT in your request in “Authorization” header.

AuthenticatedOnly

The AuthenticatedOnly permission class will only allow authenticated users to access your endpoint.

from rest_framework.views import APIView
from mongo_auth.permissions import AuthenticatedOnly
from rest_framework.response import Response
from rest_framework import status

class GetTest(APIView):

    permission_classes = [AuthenticatedOnly]

    def get(self, request, format=None):
        try:
            print(request.user)  # This is where magic happens
            return Response(status=status.HTTP_200_OK,
                            data={"data": {"msg": "User Authenticated"}})
        except:
            return Response(status=status.HTTP_404_NOT_FOUND)

Or, if you’re using the @api_view decorator with function based views.

from mongo_auth.permissions import AuthenticatedOnly
from rest_framework.decorators import permission_classes
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status

@api_view(["GET"])
@permission_classes([AuthenticatedOnly])
def get_test(request):
    try:
        print(request.user)
        return Response(status=status.HTTP_200_OK,
                        data={"data": {"msg": "User Authenticated"}})
    except:
        return Response(status=status.HTTP_404_NOT_FOUND)

Don’t forget to pass “Authorization” Header in your requests while using your views with “AuthenticatedOnly” Permission Class.

mongo_auth.db.database

As the Mongo Connection Object has already been initialised in the package, you can use it directly:

from mongo_auth.db import database

print(list(database["collection_name"].find({}, {"_id": 0}).limit(10)))

More Info

  1. Passlib is used for password encryption with default scheme as “django_pbkdf2_sha256”.

  2. Only for Django 2.0 and above.

  3. Dependent on “django-rest-framework” and “pymongo”.

Metadata

Release files for mango-jwt 1.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mango-jwt 1.3.2
File Size Uploaded Provenance
mango-jwt-1.3.2.tar.gz 6.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mango-jwt 1.3.2
File Interpreter ABI Platform
mango_jwt-1.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 14.1 kB

Release files / mango-jwt-1.3.2.tar.gz

Download URL mango-jwt-1.3.2.tar.gz
Size 6.2 kB
Tags Source
SHA-256 checksum
How to use checksums
bda2164f7efba0644c707d3bc1638c66e5a1f76ada33eb8ad2890860a6776f39
BLAKE2b-256 checksum
How to use checksums
3398f7d6137aafbd7738f55bec1f46486be5190e882accafa33790615927fb05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.7.1

Release files / mango_jwt-1.3.2-py3-none-any.whl

Download URL mango_jwt-1.3.2-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b9ff6581efbae38b148386e86963ee4fa3875d2d2ac4f682cc67759413ddf81
BLAKE2b-256 checksum
How to use checksums
06bd5e1f237972abea0812a5332f4b51a406bf1353ea42e8c28212039d03b070
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.7.1

Security for mango-jwt 1.3.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page