mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2025-08-15 11:11:16 +08:00

* Add db adapter for ormar (wip) * finish ormar support enough to pass tests * remove idea folder * update ormar version in tool.flit.metadata.requires-extra * Add documentation about ormar * Apply isort and black formatting * Restore python 3.7 in Pipfile * Update build.yml * Add missing test for ormar update * changes after review Co-authored-by: Paolo Dina <paolo.dina@codingmoth.com> Co-authored-by: collerek <collerek@gmail.com>
2.4 KiB
2.4 KiB
User model
FastAPI Users defines a minimal User model for authentication purposes. It is structured like this:
id
(UUID4
) – Unique identifier of the user. Default to a UUID4.email
(str
) – Email of the user. Validated byemail-validator
.is_active
(bool
) – Whether or not the user is active. If not, login and forgot password requests will be denied. Default toTrue
.is_verified
(bool
) – Whether or not the user is verified. Optional but helpful with theverify
router logic. Default toFalse
.is_superuser
(bool
) – Whether or not the user is a superuser. Useful to implement administration logic. Default toFalse
.
Define your models
There are four Pydantic models variations provided as mixins:
BaseUser
, which provides the basic fields and validation ;BaseCreateUser
, dedicated to user registration, which consists of compulsoryemail
andpassword
fields ;BaseUpdateUser
, dedicated to user profile update, which adds an optionalpassword
field ;BaseUserDB
, which is a representation of the user in database, adding ahashed_password
field.
You should define each of those variations, inheriting from each mixin:
from fastapi_users import models
class User(models.BaseUser):
pass
class UserCreate(models.BaseUserCreate):
pass
class UserUpdate(User, models.BaseUserUpdate):
pass
class UserDB(User, models.BaseUserDB):
pass
You can of course add your own properties there to fit to your needs!
Password validation
FastAPI Users doesn't provide a default password validation, but you can implement it easily with a Pydantic validator on the UserCreate
class. Here is a simple example to check if the password is at least six characters long:
from fastapi_users import models
from pydantic import validator
class UserCreate(models.BaseUserCreate):
@validator('password')
def valid_password(cls, v: str):
if len(v) < 6:
raise ValueError('Password should be at least 6 characters')
return v
Next steps
Depending on your database backend, the database configuration will differ a bit.