Skip to main content

🔐 Pluggable Auth System for FastAPI — JWT, Roles, Google OAuth, Hashing, and Decorators

Project description

📦 xUserAuth

A modular, production-ready authentication and user management library for FastAPI.

Supports:

  • JWT-based auth (access, refresh, email verification, password reset)
  • Role-based access control (RBAC)
  • Password hashing
  • Google OAuth integration
  • Custom user model support

📌 Installation

pip install xuserauth

Or for development:

git clone https://github.com/yourusername/xuserauth.git
cd xuserauth
pip install -e .

🧠 Core Components

Module Purpose
auth_manager.py Central class for managing auth workflows
jwt_utils.py JWT encoding/decoding helpers
hashing.py Password hashing & verification
roles.py Role checking utilities
exceptions.py Standardized auth errors
schemas.py Pydantic base user schemas
social/google.py Google OAuth2 login/callback

🛠 Setup & Configuration

✅ 1. Define your user model

# myapp/models.py
class User:
    def __init__(self, id, email, password, is_active=True, roles=["user"], email_verified=False):
        self.id = id
        self.email = email
        self.password = password
        self.is_active = is_active
        self.roles = roles
        self.email_verified = email_verified

✅ 2. Define a user loader

async def get_user_by_id(user_id: str):
    # Replace with your DB query logic
    return fake_user_db.get(user_id)

✅ 3. Initialize AuthManager

from xuserauth import AuthManager
from myapp.models import User

auth = AuthManager(
    user_model=User,
    jwt_secret="your_secret_key_here",
    user_loader=get_user_by_id
)

🔐 Usage Examples

🧪 Register / Hash Password

hashed = auth.hash_password("mypassword")

🔐 Login

if auth.verify_password("mypassword", user.password):
    access_token = auth.generate_token(user)
    refresh_token = auth.generate_refresh_token(user)

🔄 Refresh Token

new_token = await auth.refresh_access_token(refresh_token)

🛡 Protect Routes (Auth + Role)

@app.get("/me")
@auth.require_authenticated
async def get_profile(user):
    return {"email": user.email, "roles": user.roles}
@app.get("/admin")
@auth.require_role("admin")
async def get_admin_panel(user):
    return {"message": "Welcome Admin"}

📬 Token Types

Type Use
access Short-lived access token (default)
refresh Refresh token for session renewal
email Email verification token
reset Password reset token

🧪 Google OAuth Login

Redirect to Google:

@app.get("/login/google")
async def google_login(request: Request):
    return await login_with_google(request)

Google Callback:

@app.get("/auth/google/callback")
async def google_callback(request: Request):
    user_info = await auth_google_callback(request)
    # Link or register user in your DB

🔍 Testing

Tests included for:

  • JWT creation/verification
  • Password hashing
  • Role-based access
  • Google OAuth
  • Error handling

Run tests:

pytest test/

⚠️ Exception Classes

  • InvalidToken
  • PermissionDenied
  • UserNotFound
  • AuthError

✅ Schema Examples (Pydantic)

from xuserauth.schemas import UserCreate, UserRead

user = UserCreate(email="a@a.com", password="secure123")

📎 Example Folder Structure

yourapp/
├── main.py
├── models.py
├── routes.py
├── auth/
│   └── auth_manager.py
├── utils/
│   └── hashing.py

🧩 Roadmap

  • ✅ Google login
  • ✅ RBAC
  • ⏳ Facebook login (planned)
  • ⏳ Refresh token rotation
  • ⏳ Database adapters (SQLModel, Tortoise, Prisma)

📝 License

MIT License © 2025 Aliyu Abdulbasit Ayinde


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

xuserauth-1.0.2.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xuserauth-1.0.2-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file xuserauth-1.0.2.tar.gz.

File metadata

  • Download URL: xuserauth-1.0.2.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for xuserauth-1.0.2.tar.gz
Algorithm Hash digest
SHA256 4acdb6e39db88701eb7439bc09eeb4d7e9a5b4a0eb70fe86c83f67a4c7c9dbed
MD5 1db443a0a5823079171aaa6872d1f287
BLAKE2b-256 27fe5ff058d6bc7d99e388373b3fb64b3b96a6cb9d5d0ef0b09dfb1d4e00b07d

See more details on using hashes here.

File details

Details for the file xuserauth-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: xuserauth-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for xuserauth-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ff4e1ea629a65300dcc87c3646b2a897c06da49942a5d7395f265f91d9050dda
MD5 bab1456987a0476ed397985287847a3a
BLAKE2b-256 0e48452f98b6241fd9b71ee34729845f0864b47e08fcb1f4023178599f1b8138

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page