Skip to main content

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

  1. Always use HTTPS in production
  2. Use a strong secret key and keep it secure
  3. Set appropriate token expiration times
  4. Enable httpOnly and secure flags for cookies
  5. Consider implementing rate limiting for authentication endpoints

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

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

fastauth_iq-0.1.3.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

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

fastauth_iq-0.1.3-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file fastauth_iq-0.1.3.tar.gz.

File metadata

  • Download URL: fastauth_iq-0.1.3.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

Hashes for fastauth_iq-0.1.3.tar.gz
Algorithm Hash digest
SHA256 9e362123c7ad98adec5478ff300ea6015b03a4525ce1a49a8c24347df6a356ee
MD5 a550ecf01c3a5e27f1bf02f47c0e41fd
BLAKE2b-256 8742360a4b1bbbb0af6d5f917a44b64e6f8513a4f7c02f790a2bacbddf9f82a3

See more details on using hashes here.

File details

Details for the file fastauth_iq-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: fastauth_iq-0.1.3-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

Hashes for fastauth_iq-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3abe631a190199f120607cd89829debf384473055dda915cbda2f45850f685d6
MD5 3b9e039cce98f4d99349d8fec1d5a387
BLAKE2b-256 5e8bcfd007454cca57af92a5c55784770a0cfd6128395cd14305219dc865581d

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