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
  • Role-based access control (customizable)

Installation

pip install fastauth

Or install from source:

git clone https://github.com/yourusername/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
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.0.tar.gz (8.8 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.0-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastauth_iq-0.1.0.tar.gz
  • Upload date:
  • Size: 8.8 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.0.tar.gz
Algorithm Hash digest
SHA256 3b52de95e94fc4dca113cafc8f8b9b496416f720dfc1d644bcd1b0eeac679412
MD5 1dff9b32550fe3353dd1c6208ab7c6ba
BLAKE2b-256 d99c2e27e276ee37d940a8510e0948204a83a133e399276c30c55a9dd3cfd6d8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastauth_iq-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.8 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bc389720bd0b3b4fa516f39117c225821109f8610823036d0428756b3ce176b1
MD5 6982fb423063bb3e0ea68359c7f3f15d
BLAKE2b-256 a8c8b0db35f9f0cd6885f5f7c9cf26bacd6185f9fbef919e02afacb5b2ffe09c

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