Skip to content
You're not viewing the latest version. Click here to go to latest.

# FastAPI Users

Ready-to-use and customizable users management for FastAPI

Documentation: https://fastapi-users.github.io/fastapi-users/

Source Code: https://github.com/fastapi-users/fastapi-users

Add quickly a registration and authentication system to your FastAPI project. FastAPI Users is designed to be as customizable and adaptable as possible.

## Features

- Extensible base user model
- Ready-to-use register, login, reset password and verify e-mail routes
- Ready-to-use social OAuth2 login flow
- Dependency callables to inject current user in route
- Pluggable password validation
- Customizable database backend
  - SQLAlchemy ORM async included
  - MongoDB with Beanie ODM included
- Multiple customizable authentication backends
  - Transports: Authorization header, Cookie
  - Strategies: JWT, Database, Redis
- Full OpenAPI schema support, even with several authentication backends

## In a hurry? Discover Fief, the open-source authentication platform

Implementing registration, login, social auth is hard and painful. We know it. With our highly secure and open-source users management platform, you can focus on your app while staying in control of your users data.

- Based on FastAPI Users!
- Open-source: self-host it for free or use our hosted version
- Bring your own database: host your database anywhere, we'll take care of the rest
- Pre-built login and registration pages: clean and fast authentication so you don't have to do it yourself
- Official Python client with built-in FastAPI integration

It's free!

## Contributors and sponsors ✨☕️

Thanks goes to these wonderful people (emoji key):

François Voron 🚧 | Paolo Dina 💵 💻 | Dmytro Ohorodnik 🐛 | Matthew D. Scholefield 🐛 | roywes 🐛 💻 | Satwik Kansal 📖 | Edd Salkield 💻 📖
mark-todd 💻 📖 | lill74 🐛 💻 📖 | SelfhostedPro 🛡️ 💻 | Oskar Gmerek 📖 | Martin Collado 🐛 💻 | Eric Lopes 📖 🛡️ | Beau Breon 💻
Niyas Mohammed 📖 | prostomarkeloff 📖 💻 | Marius Mézerette 🐛 🤔 | Nickolas Grigoriadis 🐛 | Open Data Coder 🤔 | Mohammed Alshehri 🤔 | Tyler Renelle 🤔
collerek 💻 | Robert Bracco 💵 | Augusto Herrmann 📖 | Smithybrewer 🐛 | silllli 📖 | alexferrari88 💵 | sandalwoodbox 🐛
Vlad Hoi 📖 | Joe Nudell 🐛 | Ben 💻 | BoYanZh 📖 | David Brochart 📖 💻 | Daan Beverdam 💻 | Stéphane Raimbault ⚠️ 🐛
Sondre Lillebø Gundersen 📖 | Maxim 📖 🐛 | scottdavort 💵 | John Dukewich 📖 | Yasser Tahiri 💻 | Brandon H. Goding 💻 | PovilasK 💻
Just van den Broecke 💵 | jakemanger 🐛 💻 | Ikko Ashimine 💻 | Matyáš Richter 💻 | Hazedd 🐛 📖 | Luis Roel 💵 | Alexandr Makurin 💻 🐛
Leon Thurner 📖 | Goran Mekić 📦 | Gaganpreet 💻 | Joe Taylor 💻 | Richard Friberg 🐛 | Kenton Parton 💵 | Adrian Ciołek 🐛
⭕Alexander Rymdeko-Harvey 📖

This project follows the all-contributors specification. Contributions of any kind welcome!

## Development

### Setup environment

You should create a virtual environment and activate it:

    python -m venv venv/

    source venv/bin/activate

And then install the development dependencies:

    make install

### Run unit tests

You can run all the tests with:

    make test

Alternatively, you can run `pytest` yourself.

    pytest

There are quite a few unit tests, so you might run into ulimit issues where there are too many open file descriptors. You may be able to set a new, higher limit temporarily with:

    ulimit -n 2048

### Format the code

Execute the following command to apply `isort` and `black` formatting:

    make format

## License

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

Back to top