A comprehensive authentication library for FastAPI with JWT and cookie support
Project description
FastAuth
A comprehensive authentication library for FastAPI applications with JWT-based authentication and SQLModel integration.
Features
- OAuth2 and JWT authentication built-in
- Cookie-based authentication option
- Token refresh mechanism for extended sessions
- SQLModel integration for easy database operations
- Ready-to-use authentication routes with minimal setup
- Password hashing with bcrypt
Installation
pip install fastauth_iq
Or install from source:
git clone https://github.com/hu55ain3laa/fastauth.git
cd fastauth
pip install -e .
Quick Start
1. Create a User Model
FastAuth works with SQLModel's user model. You can use the built-in User model or create your own:
from sqlmodel import SQLModel, Field
class User(SQLModel, table=True):
id: int = Field(primary_key=True)
username: str = Field(unique=True)
email: str = Field(unique=True)
hashed_password: str
disabled: bool = Field(default=False)
2. Initialize FastAuth in Your Application
from fastapi import FastAPI, Depends
from sqlmodel import create_engine, Session, SQLModel
# Import FastAuth directly - the package is installed as fastauth_iq but imported as fastauth
from fastauth import FastAuth
from myapp.models import User
# Create FastAPI app
app = FastAPI()
# Setup database
engine = create_engine("sqlite:///./app.db")
# Session dependency
def get_session():
with Session(engine) as session:
yield session
# Initialize FastAuth with your configuration
auth = FastAuth(
secret_key="your-secure-secret-key", # Use strong secret in production
algorithm="HS256",
user_model=User,
engine=engine,
use_cookie=True, # Enable cookie-based auth (optional)
token_url="/token",
access_token_expires_in=30, # minutes
refresh_token_expires_in=7 # days
)
# Add all authentication routes automatically
auth_router = auth.get_auth_router(get_session)
app.include_router(auth_router, tags=["authentication"])
3. Protect Your Routes
@app.get("/protected")
def protected_route(current_user = Depends(auth.get_current_active_user_dependency())):
return {"message": f"Hello, {current_user.username}!"}
Available Authentication Endpoints
The get_auth_router() method automatically adds these endpoints to your application:
- POST /token - Get access and refresh tokens with username/password
- POST /token/refresh - Get a new access token using a refresh token
- POST /users - Register a new user
- GET /users/me - Get the current authenticated user's information
Customization Options
Cookie-Based Authentication
Enable cookie-based authentication by setting use_cookie=True:
auth = FastAuth(
# ... other parameters
use_cookie=True
)
Custom Token Expiration
Set custom expiration times for tokens:
auth = FastAuth(
# ... other parameters
access_token_expires_in=60, # 60 minutes
refresh_token_expires_in=30 # 30 days
)
Advanced Usage: Custom Authentication Routes
You can create your own authentication routes instead of using the built-in router:
@app.post("/custom-login")
async def custom_login(
username: str,
password: str,
session: Session = Depends(get_session)
):
user = auth.authenticate_user(username, password)
if not user:
raise HTTPException(status_code=401, detail="Invalid credentials")
access_token = auth.create_access_token(data={"sub": user.username})
return {"access_token": access_token, "token_type": "bearer"}
Security Best Practices
- Always use HTTPS in production
- Use a strong secret key and keep it secure
- Set appropriate token expiration times
- Enable httpOnly and secure flags for cookies
- Consider implementing rate limiting for authentication endpoints
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
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 fastauth_iq-0.1.2.tar.gz.
File metadata
- Download URL: fastauth_iq-0.1.2.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03299bb18c2fc2bacb38a95bc9e6ba2b3675cc6c988b29ebcdbe6c7ef43569da
|
|
| MD5 |
0022a183fd753ee88ac45e0ebfa4bce9
|
|
| BLAKE2b-256 |
7c65989dc3485ce163b6d42d1226206e191e40b1badf42fd2fb33b49c98428fa
|
File details
Details for the file fastauth_iq-0.1.2-py3-none-any.whl.
File metadata
- Download URL: fastauth_iq-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
777ae87847d101d4221686bc800b424730b56d59bcbb1272f7a20762312a3618
|
|
| MD5 |
698366de4bf64dd2b13672ddd80990c0
|
|
| BLAKE2b-256 |
efd4b56afade57fb039cafb4a19570d275f1acbda879a9f45d854017de9aebbf
|