Production-ready FastAPI auth system with JWT, refresh tokens, and async DB support
Project description
FastAPI Auth 🔐
Production-ready authentication system for FastAPI with async support, JWT, refresh tokens, and pluggable database backends.
🚀 Features
-
⚡ Fully async (no blocking I/O)
-
🔐 JWT authentication (access + refresh tokens)
-
🔁 Refresh token flow
-
🚪 Logout with token blacklist
-
🧱 Multi-database support:
- PostgreSQL (asyncpg)
- MySQL (aiomysql)
- SQLite (aiosqlite)
- MongoDB (motor)
-
🧠 Dependency-based auth (FastAPI native)
-
📦 Plug-and-play integration
-
🛡️ Password hashing with Argon2 (modern standard)
-
📄 Clean OpenAPI (Swagger) docs with Pydantic schemas
📦 Installation
pip install fastapi-auth[<db>]
With database support
pip install fastapi-auth[postgres]
pip install fastapi-auth[mysql]
pip install fastapi-auth[mongodb]
pip install fastapi-auth[sqlite]
⚙️ Quick Start
Step 1: How to initiate auth on startup
from fastapi import FastAPI
from fastapi_auth_ import init_auth, AuthConfig
app = FastAPI()
@app.on_event("startup")
async def startup():
await init_auth(
app,
AuthConfig(
secret_key="your-secret",
db_url="postgresql+asyncpg://user:pass@localhost/db",
db_type="postgres"
)
)
Step 2: How to validate token for all your FastAPIs
from fastapi import APIRouter, Depends
from fastapi_auth.dependencies.auth import get_current_user
router = APIRouter()
@router.get("/user")
async def me(user=Depends(get_current_user)):
return user
🔐 Available Endpoints
| Endpoint | Description |
|---|---|
| POST /auth/register | Register new user |
| POST /auth/login | Login and get tokens |
| POST /auth/refresh | Refresh access token |
| POST /auth/logout | Logout and revoke token |
| GET /auth/me | Get current user |
🧪 Example
Login
POST /auth/login
{
"username": "john",
"password": "Strong@123"
}
Response
{
"access": "jwt_token",
"refresh": "refresh_token"
}
🧠 Architecture
FastAPI App
↓
Auth Service
↓
Repository Layer
↓
Database (Async)
🛡️ Security
- Argon2 password hashing
- JWT token expiration
- Refresh token blacklist
- No sensitive data exposure
- Clean error handling
🧩 Extensibility
- Add RBAC (roles & permissions)
- Plug custom user models
- Add OAuth providers (Google, GitHub)
- Integrate Redis for token storage
🛠 Tech Stack
- FastAPI
- SQLAlchemy (async)
- Pydantic
- python-jose (JWT)
- Argon2 (password hashing)
📌 Roadmap
- RBAC support
- Redis token blacklist
- OAuth integration
- Rate limiting
- Email verification
🤝 Contributing
Pull requests are welcome. For major changes, open an issue first.
📄 License
MIT License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi_async_auth_kit-0.2.0.tar.gz.
File metadata
- Download URL: fastapi_async_auth_kit-0.2.0.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d026bd4a9a01275a737a0aed427ab35ae25a706949b2668a9a27c7479ef719f6
|
|
| MD5 |
19560d408603141f7ab04e51af2b326f
|
|
| BLAKE2b-256 |
0d8e8175dae6af173c28816022fd92f467ce375a301e0b4c3f7139d563982993
|
File details
Details for the file fastapi_async_auth_kit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fastapi_async_auth_kit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41a1ae90781d2e9c0a49948eb1a11e08a2eee1d944e5b92076c21ec69411df5b
|
|
| MD5 |
71e7a7fe9932a73cf51b5b1fbfc9d3b0
|
|
| BLAKE2b-256 |
e1ef1009b88f0e94c601f783b073b28155f40241ba7089033b65cf387c8e7994
|