Skip to main content

Sub-package for Deta Base support in FastAPI Users.

Project description

FastAPI Users DB Deta

https://img.shields.io/pypi/v/fastapi_users_db_deta.svg https://img.shields.io/travis/ak4zh/fastapi_users_db_deta.svg Documentation Status

Sub-package for Deta Base support in FastAPI Users.

Installation

To install FastAPI Users DB Deta in a project:

pip install -U fastapi_users_db_deta

Usage

Project structure:

.
├── users
│   ├── __init__.py
│   ├── models.py
│   ├── manager.py
└── main.py

users/models.py:

from fastapi_users import models
from fastapi_users.models import BaseOAuthAccountMixin


class User(models.BaseUser, BaseOAuthAccountMixin):
    pass


class UserCreate(models.BaseUserCreate):
    pass


class UserUpdate(models.BaseUserUpdate):
    pass


class UserDB(User, models.BaseUserDB):
    pass

users/manager.py:

from typing import Optional

import deta
from fastapi import Depends, Request
from fastapi_users import BaseUserManager, FastAPIUsers
from fastapi_users.authentication import JWTAuthentication, CookieAuthentication
from fastapi_users_db_deta import DetaBaseUserDatabase

from users.models import UserDB, UserCreate, UserUpdate, User

SECRET = 'secret'
DETA_PROJECT_KEY = 'deta_project_key'
DATABASE = deta.Deta(DETA_PROJECT_KEY)
UserBase = DATABASE.Base('users')
OAuthBase = DATABASE.Base('oauth_accounts')


class UserManager(BaseUserManager[UserCreate, UserDB]):
    user_db_model = UserDB
    reset_password_token_secret = SECRET
    verification_token_secret = SECRET


async def get_user_db():
    yield DetaBaseUserDatabase(UserDB, UserBase().db, OAuthBase().db)


async def get_user_manager(user_db=Depends(get_user_db)):
    yield UserManager(user_db)


jwt_authentication = JWTAuthentication(
    secret=SECRET, lifetime_seconds=5, tokenUrl="auth/jwt/login"
)
cookie_authentication = CookieAuthentication(
    secret=SECRET, lifetime_seconds=5, cookie_name='userAuthToken'
)

fastapi_users_app = FastAPIUsers(
    get_user_manager,
    [jwt_authentication, cookie_authentication],
    User,
    UserCreate,
    UserUpdate,
    UserDB,
)

current_active_user = fastapi_users_app.current_user(active=True)

main.py:

from fastapi import FastAPI

from users.manager import cookie_authentication, jwt_authentication, fastapi_users_app

app = FastAPI()

# include cookie auth router
app.include_router(
    fastapi_users_app.get_auth_router(
        cookie_authentication,
    ), prefix="/auth/cookie", tags=["auth"]
)

# include jwt auth router
app.include_router(
    fastapi_users_app.get_auth_router(
        jwt_authentication,
    ), prefix="/auth/jwt", tags=["auth"]
)

app.include_router(
    fastapi_users_app.get_register_router(), prefix="/auth", tags=["auth"]
)

app.include_router(
    fastapi_users_app.get_reset_password_router(),
    prefix="/auth",
    tags=["auth"],
)

app.include_router(
    fastapi_users_app.get_verify_router(),
    prefix="/auth",
    tags=["auth"],
)

app.include_router(
    fastapi_users_app.get_users_router(), prefix="/users", tags=["users"]
)

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.1.0 (2021-11-17)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_users_db_deta-0.2.0.tar.gz (11.6 kB view hashes)

Uploaded Source

Built Distribution

fastapi_users_db_deta-0.2.0-py2.py3-none-any.whl (5.3 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page