fastapi_contrib.auth package

Submodules

fastapi_contrib.auth.backends module

class fastapi_contrib.auth.backends.AuthBackend[source]

Bases: starlette.authentication.AuthenticationBackend

Own Auth Backend based on Starlette’s AuthenticationBackend.

Use instance of this class as backend argument to add_middleware func:

app = FastAPI()

@app.on_event('startup')
async def startup():
    app.add_middleware(AuthenticationMiddleware, backend=AuthBackend())
async authenticate(conn: starlette.requests.HTTPConnection)Tuple[bool, Optional[fastapi_contrib.auth.models.User]][source]

Main function that AuthenticationMiddleware uses from this backend. Should return whether request is authenticated based on credentials and if it was, return also user instance.

Parameters

conn – HTTPConnection of the current request-response cycle

Returns

2-tuple: is authenticated & user instance if exists

fastapi_contrib.auth.middlewares module

class fastapi_contrib.auth.middlewares.AuthenticationMiddleware(app: Callable[[MutableMapping[str, Any], Callable[], Awaitable[MutableMapping[str, Any]]], Callable[[MutableMapping[str, Any]], Awaitable[None]]], Awaitable[None]], backend: starlette.authentication.AuthenticationBackend, on_error: Optional[Callable[[starlette.requests.HTTPConnection, starlette.authentication.AuthenticationError], starlette.responses.Response]] = None)[source]

Bases: starlette.middleware.authentication.AuthenticationMiddleware

Own Authentication Middleware based on Starlette’s default one.

Use instance of this class as a first argument to add_middleware func:

app = FastAPI()

@app.on_event('startup')
async def startup():
    app.add_middleware(AuthenticationMiddleware, backend=AuthBackend())
static default_on_error(conn: starlette.requests.HTTPConnection, exc: Exception)fastapi_contrib.common.responses.UJSONResponse[source]

Overriden method just to make sure we return response in our format.

Parameters
  • conn – HTTPConnection of the current request-response cycle

  • exc – Any exception that could have been raised

Returns

UJSONResponse with error data as dict and 403 status code

fastapi_contrib.auth.models module

class fastapi_contrib.auth.models.Token(*, id: int = None, created: datetime.datetime = None, key: fastapi_contrib.auth.models.ConstrainedStrValue = None, user_id: int = None, expires: datetime.datetime = None, is_active: bool = True)[source]

Bases: fastapi_contrib.db.models.MongoDBTimeStampedModel

Default Token model with several fields implemented as a default:
  • id - inherited from MongoDBTimeStampedModel

  • created - inherited from MongoDBTimeStampedModel

  • key - string against which user will be authenticated

  • user_id - id of User, who owns this token

  • expires - datetime when this token no longer active

  • is_active - defines whether this token can be used

class Meta[source]

Bases: object

collection = 'tokens'
indexes = [<pymongo.operations.IndexModel object>]
expires: datetime.datetime
is_active: bool
key: fastapi_contrib.auth.models.ConstrainedStrValue
classmethod set_key(v, values, **kwargs)str[source]

If key is supplied (ex. from DB) then use it, otherwise generate new.

user_id: int
class fastapi_contrib.auth.models.User(*, id: int = None, created: datetime.datetime = None, username: str)[source]

Bases: fastapi_contrib.db.models.MongoDBTimeStampedModel

Default User model that has only username field on top of default (id, created) pair from MongoDBTimeStampedModel

class Meta[source]

Bases: object

collection = 'users'
username: str

fastapi_contrib.auth.permissions module

class fastapi_contrib.auth.permissions.IsAuthenticated(request: starlette.requests.Request)[source]

Bases: fastapi_contrib.permissions.BasePermission

Permission that checks if the user has been authenticated (by middleware)

Use it as an argument to PermissionsDependency as follows:

app = FastAPI()

@app.get(
    "/user/",
    dependencies=[Depends(PermissionsDependency([IsAuthenticated]))]
)
async def user(request: Request) -> dict:
    return request.scope["user"].dict()
error_code = 401
error_msg = 'Not authenticated.'
has_required_permissions(request: starlette.requests.Request)bool[source]
status_code = 401

fastapi_contrib.auth.serializers module

class fastapi_contrib.auth.serializers.TokenSerializer[source]

Bases: fastapi_contrib.serializers.common.ModelSerializer

Serializer for the default Token model. Use it if you use default model.

class Meta[source]

Bases: object

exclude = {'user_id'}
model

alias of fastapi_contrib.auth.models.Token

Module contents