Ready-to-use and customizable Authentications and Oauth2 management for FastAPI ⚡
Source Code: https://github.com/yezz123/AuthX
Documentation: https://authx.yezz.codes/
Add a Fully registration and authentication or authorization system to your FastAPI project. AuthX is designed to be as customizable and adaptable as possible.
Note: This is a beta version of AuthX.
- Support Python 3.8+.
- Extensible base user model.
- Ready-to-use register, login, reset password and verify e-mail routes.
- Ready-to-use Social login and Oauth2 routes. (now with Google, Facebook)
- Soon with Microsoft, Twitter, Github, etc.
- Ready-to-use social OAuth2 login flow
- Tested Project on Docker.
- Dependency callable to inject current user in route
- Pluggable password validation
- Using Captcha Service.
- Using Email Service. (SMTP)
- Extensible Error Handling
- High level API to manage users, roles and permissions
- Using Redis as a session store & cache.
- Customizable database backend:
- MongoDB async backend included thanks to mongodb/motor
- Multiple customizable authentication backend:
- JWT authentication backend included
- Soon to be included Cookie authentication backend
- Full OpenAPI schema support, even with several authentication backend.
- Provide a Docstring for each class and function.
Note: Check Release Notes.
from fastapi import FastAPI
from AuthX import Authentication
app = FastAPI()
auth = Authentication()
# Define your routes here
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")
from fastapi import FastAPI
from AuthX import Authentication
from AuthX.database import MongoDBBackend, RedisBackend
app = FastAPI()
auth = Authentication()
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 MongoDB and Redis Cache
auth.set_cache(RedisBackend) # aioredis client
auth.set_database(MongoDBBackend) # motor client
from fastapi import FastAPI,APIRouter, Depends
from AuthX import User, Authentication
from AuthX.database import MongoDBBackend, RedisBackend
app = FastAPI()
auth = Authentication()
router = APIRouter()
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 MongoDB and Redis Cache
auth.set_cache(RedisBackend) # aioredis client
auth.set_database(MongoDBBackend) # motor client
# 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
from AuthX import AuthX
from AuthX.database import RedisBackend
auth = AuthX(#Provide Config)
# startup
auth.set_cache(RedisBackend) # aioredis
You should create a virtual environment and activate it:
python -m venv venv/
source venv/bin/activate
And then install the development dependencies:
pip install -r requirements.dev.txt
You can run all the tests with:
make test
The command will start a MongoDB container for the related unit tests. So you should have Docker installed.
Alternatively, you can run pytest
yourself. The MongoDB unit tests will be skipped if no server is available on your local machine:
pytest
Execute the following command to apply pre-commit
formatting:
make lint
Thanks goes to these wonderful people (emoji key):
Yasser Tahiri 💻 📖 🚧 🚇 |
Abderrahim SOUBAI-ELIDRISI 👀 📖 |
This project follows the all-contributors specification. Contributions of any kind welcome!
This project is licensed under the terms of the MIT License.