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.11
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.11.tar.gz | 13.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| auth_drf-0.1.11-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 33.0 kB
Release files / auth_drf-0.1.11.tar.gz
| Download URL | auth_drf-0.1.11.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
31f90f980e17a9cc33e318d44bab71c8b69389fb39e42f84dff8ea81670a4deb
|
|
BLAKE2b-256 checksum How to use checksums |
188157758820d9fb72b260e850cb99ef1250e048e8dc5d0c091bf7789f7c8ed6
|
| 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.11-py3-none-any.whl
| Download URL | auth_drf-0.1.11-py3-none-any.whl |
|---|---|
| Size | 19.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9c6693390923e239400d4a66c46fcf5b997ec1bcb4a0c0dd152e0413d8d8db3f
|
|
BLAKE2b-256 checksum How to use checksums |
924b14f10065d374fb4677ec35fbdc7fd2e727229051c6fb04405cf2b089ae33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|