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.6.tar.gz (9.3 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.6-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastauth_iq-0.1.6.tar.gz
  • Upload date:
  • Size: 9.3 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.6.tar.gz
Algorithm Hash digest
SHA256 fb02ecce43bfeca9ca47f0c61bf57dd174852855d81e1870b9238ddffc78c4cd
MD5 452912b457b8790b985ef97a128615e8
BLAKE2b-256 78248893865979456d72b26ee8d7aad1db4a36e61a3a13db25323fbbb53839a8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastauth_iq-0.1.6-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.6-py3-none-any.whl
Algorithm Hash digest
SHA256 01ce4595783c9474942e8761d35df7779c68b4af9d08e29e5413a3cf8d73b98a
MD5 9cdf0fccbff87b41b157752276aded91
BLAKE2b-256 c844a8ab3ff4086dfc44a448cd8a8d4eb317fffa8ea36237475bb4c72ae550eb

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