Skip to content

AuthenticationX 💫

authx

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

Test Publish Pypi codecov PyPI Downloads framework


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

Get Started: 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 is a fast, flexible and easy to use authentication and authorization library for FastAPI. It is built on top of FastAPI and starlette.

Features

  • Support Python 3.9+.
  • Extensible base user model.
  • Ready-to-use register, login, reset password and verify e-mail routes.
  • Ready-to-use Social login and Oauth2 routes.
    • Full Configuration and customization.
    • Ready-to-use social OAuth2 login flow.
  • Middleware Support for Oauth2 using Authlib and Starlette.
  • Dependency callable to inject current user in route.
  • Pluggable password validation
    • Using Captcha Service.
    • Implements the HMAC algorithm And Hashlib library.
  • Using Email Service. (SMTP)
  • Extensible Error Handling
  • High level API to manage users, roles and permissions
  • Using Redis as a session store & cache.
  • Support HTTPCache.
  • Customizable database backend:
  • Multiple customizable authentication backend:
    • JWT authentication backend included
    • Cookie authentication backend included
  • Full OpenAPI schema support, even with several authentication backend.
  • Provide a Docstring for each class and function.
  • Support Sessions and Pre-built CRUD functions and Instance to launch Redis.
  • Support SocketIO.
  • Support Middleware of pyinstrument to check your service performance.
  • Support Middleware for collecting and exposing Prometheus metrics.

Project using

Startup

from fastapi import FastAPI
from authx import Authentication, User, RedisBackend

app = FastAPI()
# Set up Authentication & Authorization
auth = Authentication()

# Set up Pre-configured Routes
app.include_router(auth.auth_router, prefix="/api/users")
app.include_router(auth.social_router, prefix="/auth")
app.include_router(auth.password_router, prefix="/api/users")
app.include_router(auth.admin_router, prefix="/api/users")
app.include_router(auth.search_router, prefix="/api/users")

# Set Redis Cache
auth.set_cache(RedisBackend)

Dependency injections

# Set Anonymous User
@app.get("/anonym")
def anonym_test(user: User = Depends(auth.get_user)):
    pass


# Set Authenticated User
@app.get("/user")
def user_test(user: User = Depends(auth.get_authenticated_user)):
    pass


# Set Admin User (Only for Admins)
@app.get("/admin", dependencies=[Depends(auth.admin_required)])
def admin_test():
    pass

Dependency injections only

from authx import authx, RedisBackend

auth = authx()

auth.set_cache(RedisBackend)

License

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