auth-drf
A Django REST Framework package that provides JWT Authentication and Role-Based Access Control (RBAC).
Features
- JWT Authentication
- User Registration
- User Login
- User Logout
- Refresh Token Rotation
- Role-Based Access Control (RBAC)
- Role CRUD APIs
- Django Permission Integration
Requirements
- Python 3.12+
- Django 5.x / 6.x
- Django REST Framework
- djangorestframework-simplejwt
Installation
Install from PyPI
pip install auth-drf
Project Setup
Step 1: Add the package to INSTALLED_APPS
INSTALLED_APPS = [
...
"rest_framework",
"auth_drf",
]
Step 2: Add the Google Client, Secret, and Redirect uri
GOOGLE_CLIENT_ID = env("GOOGLE_CLIENT_ID")
GOOGLE_CLIENT_SECRET = env("GOOGLE_CLIENT_SECRET")
GOOGLE_REDIRECT_URI = env("GOOGLE_REDIRECT_URI")
Step 3: Create a Custom User Model
from auth_drf.models.user_model import BaseUser
class Customer(BaseUser):
class Meta:
abstract = False
Note
Customeris only an example. Your custom user model can have any name.
Step 4: Configure AUTH_USER_MODEL
AUTH_USER_MODEL = "user_test.Customer"
Step 5: Configure DRF Authentication
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_simplejwt.authentication.JWTAuthentication",
),
}
Step 6: Include Package URLs
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("auth_drf.urls")),
]
Step 7: Run Migrations
python manage.py makemigrations
python manage.py migrate
Authentication
After login, use the Access Token for all protected endpoints.
Authorization: Bearer <access_token>
API Endpoints
| Method | Endpoint |
|---|---|
| POST | /auth/register/ |
| POST | /auth/login/ |
| GET | /auth/google/login/ |
| GET | /auth/google/callback/ |
| POST | /auth/logout/ |
| POST | /auth/token_refresh/ |
| POST | /roles/ |
| PATCH | /roles/<id>/ |
| GET | /roles/ |
| GET | /roles/<id>/ |
Authentication APIs
Register User
Endpoint
POST /auth/register/
Request Payload
{
"first_name": "Vinnie",
"last_name": "Sheoran",
"email": "vinnie@yopmail.com",
"username": "vinnie",
"password": "vinnie"
}
Response
{
"success": "Registration Successful",
"detail": {
"user": "vinnie@yopmail.com"
}
}
Login User
Endpoint
POST /auth/login/
Request Payload
{
"email": "vinnie@yopmail.com",
"username": "vinnie",
"password": "vinnie"
}
Response
{
"id": 1,
"email": "vinnie@yopmail.com",
"username": "vinnie",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
],
"access": "<access_token>",
"refresh": "<refresh_token>"
}
Google Login User
Endpoint
GET /auth/google/login/
Response
{
"url": "<google_redirect_url>"
}
Google Login User Callback
Callback API is called automatically by Google OAuth.
Endpoint
GET /auth/google/callback?
Response
{
"id": 1,
"email": "vinnie@yopmail.com",
"username": "vinnie",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
],
"access": "<access_token>",
"refresh": "<refresh_token>"
}
Logout User
Endpoint
POST /auth/logout/
Request Payload
{
"refresh": "<refresh_token>"
}
Response
{
"success": "Logout Successful"
}
Refresh Token
Endpoint
POST /auth/token_refresh/
Request Payload
{
"refresh": "<refresh_token>"
}
Response
{
"access": "<new_access_token>",
"refresh": "<new_refresh_token>"
}
Role APIs
Create Role
Endpoint
POST /roles/
Authentication
Requires a valid Access Token.
Request Payload
{
"name": "Interns",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
]
}
Response
{
"id": 5,
"name": "Interns",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
]
}
Update Role
Endpoint
PATCH /roles/<id>/
Authentication
Requires a valid Access Token.
Request Payload
{
"name": "Manager",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
]
}
Response
{
"success": "Role is Updated",
"data": {
"id": 3,
"name": "Manager",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
]
}
}
List Roles
Endpoint
GET /roles/
Authentication
Requires a valid Access Token.
Response
[
{
"id": 2,
"name": "Administrator",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
]
},
{
"id": 3,
"name": "Manager",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
]
}
]
Retrieve Role
Endpoint
GET /roles/<id>/
Authentication
Requires a valid Access Token.
Response
{
"name": "Manager",
"permissions": [
{
"module": "customer",
"actions": [
"add_customer",
"change_customer",
"delete_customer",
"view_customer"
]
}
]
}
License
This project is licensed under the MIT License.
Release files for auth-drf 0.1.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| auth_drf-0.1.12.tar.gz | 13.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| auth_drf-0.1.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.9 kB
Release files / auth_drf-0.1.12.tar.gz
| Download URL | auth_drf-0.1.12.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
85fdc0bbc30fc4bc24e11015c416a280c318df284be57ef86b30d5a41089d54e
|
|
BLAKE2b-256 checksum How to use checksums |
da6617e9ab84191226a189ffb478593c858eb4f66030e3cb9410a1ed69a9c5df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / auth_drf-0.1.12-py3-none-any.whl
| Download URL | auth_drf-0.1.12-py3-none-any.whl |
|---|---|
| Size | 19.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ca1e5630939f6a85d95df7e21eea60df8cabf6415f424f39a6cf00ddae0d2b0a
|
|
BLAKE2b-256 checksum How to use checksums |
aa7e576eb712cef5e7b24d801562f83ae0a17b0801c28e0dcdf6298587efde52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|