An open API service indexing awesome lists of open source software.

https://github.com/layinded/xuserauth

A modular, production-ready authentication and user management library for FastAPI.
https://github.com/layinded/xuserauth

fastapi jwt jwt-auth oauth python rbac

Last synced: about 1 month ago
JSON representation

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

Awesome Lists containing this project

README

          

# ๐Ÿ“ฆ 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

```bash
pip install xuserauth
```

Or for development:

```bash
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

```python
# 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

```python
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`

```python
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

```python
hashed = auth.hash_password("mypassword")
```

### ๐Ÿ” Login

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

### ๐Ÿ”„ Refresh Token

```python
new_token = await auth.refresh_access_token(refresh_token)
```

### ๐Ÿ›ก Protect Routes (Auth + Role)

```python
@app.get("/me")
@auth.require_authenticated
async def get_profile(user):
return {"email": user.email, "roles": user.roles}
```

```python
@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:

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

### Google Callback:

```python
@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:

```bash
pytest test/
```

---

## โš ๏ธ Exception Classes

* `InvalidToken`
* `PermissionDenied`
* `UserNotFound`
* `AuthError`

---

## โœ… Schema Examples (Pydantic)

```python
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

---