Ready-to-use and customizable Authentications and Oauth2 management for FastAPI ⚡
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.
- 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 AndHashlib
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:
- MongoDB async backend included thanks to mongodb/motor
- SQLAlchemy backend included thanks to Encode/Databases
- 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.
Note: Check Release Notes.
Note: Check Examples.
from fastapi import APIRouter, Depends, FastAPI
from authx import Authentication, User, BaseDBBackend, RedisBackend
app = FastAPI()
auth = Authentication(database_backend=BaseDBBackend())
router = APIRouter()
# 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)
# Set Anonymous User
@router.get("/anonym")
def anonym_test(user: User = Depends(auth.get_user)):
pass
# Set Authenticated User
@router.get("/user")
def user_test(user: User = Depends(auth.get_authenticated_user)):
pass
# Set Admin User
@router.get("/admin", dependencies=[Depends(auth.admin_required)])
def admin_test():
pass
Thanks goes to these wonderful people (emoji key):
Yasser Tahiri 💻 📖 🚧 🚇 |
Abderrahim SOUBAI-ELIDRISI 👀 📖 |
Ismail Ghallou 💻 🛡️ |
talentuno LLC 💵 |
Cactus LLC 💵 |
MojixCoder 💻 🐛 |
Stéphane Raimbault 💻 🔌 |
theoohoho 📖 |
Yogesh Upadhyay 🐛 |
Roman 🐛 |
This project follows the all-contributors specification. Contributions of any kind welcome!
This project is licensed under the terms of the MIT License.