Skip to main content

FastAPI auth library.

It`s simple to connect to your project. Just make user_data verification, and library will manage JWT-tokens.

Installation

Install package with pip:

pip install fastapi-authtools

...or with poetry:

poetry add fastapi-authtools

Usage

You can you it with JWT-token (default in you headers).

from fastapi import FastAPI, Request, Body

from fastapi_authtools import AuthManager, login_required
from fastapi_authtools.models import UsernamePasswordToken, UserModel


app = FastAPI()

# JWT token settings
SECRET_KEY = 'secretSERCRET007'
EXPIRE_MINUTES = 60 * 40
ALGORITHM = "HS256"

# create login manager
auth_manager = AuthManager(
    app=app,
    secret_key=SECRET_KEY,
    algorithm=ALGORITHM,
    expire_minutes=EXPIRE_MINUTES
)

# now you can use login_manager directly or py adding it to the application statement
# it`s comfortable while dealing with APIRouters
app.state.auth_manager = auth_manager


@app.get("/")
@login_required  # make this endpoint allowed only for authenticated users
async def homepage(request: Request):
    current_user = request.user
    return {"current_user": current_user}


@app.post("/auth/token", status_code=201)
async def get_access_token(request: Request, user_data: UsernamePasswordToken = Body()):
    # ... here goes db user verification and getting user information
    # user = get_login_user(user_data)
    user = UserModel(
        email="suslanchikmol@gmail.con",
        username="michael7nightingale"
    )
    token = request.app.state.auth_manager.create_token(user)
    return {"access_token": token}

But you can still use cookies to save token, just define user_cookies as True when initialize AuthManager.

To use templates and form data you should install jinja2 and python-multipart.

from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse
from fastapi.templating import Jinja2Templates

from fastapi_authtools import AuthManager, login_required
from fastapi_authtools.models import UserModel


app = FastAPI()
templates = Jinja2Templates(directory="templates")

# JWT token settings
SECRET_KEY = 'secretSERCRET007'
EXPIRE_MINUTES = 60 * 40
ALGORITHM = "HS256"

# create login manager
auth_manager = AuthManager(
    app=app,
    use_cookies=True,
    secret_key=SECRET_KEY,
    algorithm=ALGORITHM,
    expire_minutes=EXPIRE_MINUTES
)

# now you can use login_manager directly or py adding it to the application statement
# it`s comfortable while dealing with APIRouters
app.state.auth_manager = auth_manager


@app.get("/")
@login_required  # make this endpoint allowed only for authenticated users
async def homepage(request: Request):
    return templates.TemplateResponse(
        name="homepage.html",
        context={"request": request, "current_user": request.user}
    )


@app.get('/login')
async def login_get(request: Request):
    return templates.TemplateResponse(
        name='login.html',
        context={"request": request}
    )


@app.post("/login", status_code=201)
async def login_post(request: Request):
    user_data = await request.form()
    # ... here goes db user verification and getting user information
    # user = get_login_user(user_data)
    user = UserModel(
        email="suslanchikmol@gmail.con",
        username="michael7nightingale"
    )
    response = RedirectResponse(app.url_path_for("homepage"), status_code=303)
    app.state.auth_manager.login(response, user)
    return response

Auth manager adds authentication middleware to your application instance and uses authentication backends to treat token and request user instance.

Release files for fastapi-authtools 0.6.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-authtools 0.6.2
File Size Uploaded
fastapi_authtools-0.6.2.tar.gz 10.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-authtools 0.6.2
File Interpreter ABI Platform
fastapi_authtools-0.6.2-py3-none-any.whl Python 3 none any Details

Total release size: 18.4 kB

Release files / fastapi_authtools-0.6.2.tar.gz

Download URL fastapi_authtools-0.6.2.tar.gz
Size 10.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f7da20f8436fb70252f0648b207263e5b74487bfd58bd86733cb56e429e30af6
BLAKE2b-256 checksum
How to use checksums
4778d62c01eb198d4c21f2426fb76d905ca805ecd48266b54fbbc17f4272a973
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.0rc1

Release files / fastapi_authtools-0.6.2-py3-none-any.whl

Download URL fastapi_authtools-0.6.2-py3-none-any.whl
Size 8.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2d2471b685da123245ecff03a15aa0bf549b3ebb59f5af483ae90613065f0eec
BLAKE2b-256 checksum
How to use checksums
3f317e8da9405861d9299f9f4a4d5a82ddf8130da1b926a13568b4cbd3310cb9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.0rc1

Release history Release notifications | RSS feed

This release

0.6.2 This release

2 release files

0.6.1

1 release file

0.6

1 release file

0.5

2 release files

0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page