Skip to content

AuthenticationX πŸ’«ΒΆ

AuthX

Ready-to-use and customizable Authentications and Oauth2 management for FastAPI ⚑

lint Package version Test


Source Code: https://github.com/yezz123/authx

Documentation: https://authx.yezz.me/


Add a Fully registration and authentication or authorization system to your FastAPI project. AuthX is designed to be as customizable and adaptable as possible.

Authx V0.9.xΒΆ

This branch relates to development of authx V1 which is not yet ready for production use.

If you're a Authx user, you probably want either Authx V0.9 Documentation or, 0.X.X-fix git branch.

Installation πŸ“¦ΒΆ

authx

Features πŸ”§ΒΆ

  • Support Python 3.9+.
  • Multiple customizable authentication backend:
  • JWT authentication backend included
    • JWT encoding/decoding for application authentication
    • Automatic detection of JWTs in requests:
    • JWTs in headers
    • JWTs in cookies
    • JWTs in query parameters
    • JWTs in request bodies
  • Cookie authentication backend included
  • middleware for authentication and authorization through JWT.
  • Extensible Error Handling System.
  • Using Redis as a session store & cache.
  • Support HTTPCache.
  • Support Sessions and Pre-built CRUD functions and Instance to launch Redis.
  • Support Middleware of pyinstrument to check your service performance.
  • Support Middleware for collecting and exposing Prometheus metrics.

Note: Check Release Notes.

Project using πŸš€ΒΆ

Here is a simple way to kickstart your project with AuthX:

from fastapi import FastAPI, Depends, HTTPException
from authx import AuthX, AuthXConfig, RequestToken

app = FastAPI()

config = AuthXConfig(
     JWT_ALGORITHM = "HS256",
     JWT_SECRET_KEY = "SECRET_KEY",
     JWT_TOKEN_LOCATION = ["headers"],
)

auth = AuthX(config=config)
auth.handle_errors(app)

@app.get('/login')
def login(username: str, password: str):
     if username == "xyz" and password == "xyz":
          token = auth.create_access_token(uid=username)
          return {"access_token": token}
     raise HTTPException(401, detail={"message": "Invalid credentials"})

@app.get("/protected", dependencies=[Depends(auth.get_token_from_request)])
def get_protected(token: RequestToken = Depends()):
     try:
          auth.verify_token(token=token)
          return {"message": "Hello world !"}
     except Exception as e:
          raise HTTPException(401, detail={"message": str(e)}) from e

License πŸ“ΒΆ

This project is licensed under the terms of the MIT License.