No project description provided
Project description
FastAPI-Login
FastAPI-Login tries to provide similar functionality as Flask-Login does.
Installation
$ pip install fastapi-login
Usage
To begin we have to setup our FastAPI app:
from fastapi import FastAPI
SECRET = "your-secret-key"
app = FastAPI()
To obtain a suitable secret key you can run import os; print(os.urandom(24).hex())
.
Now we can import and setup the LoginManager, which will handle the process of encoding and decoding our Json Web Tokens.
from fastapi_login import LoginManager
manager = LoginManager(SECRET, app)
For the example we will use a dictionary to represent our user database. In your application this could also be a real database like sqlite or Postgres. It does not matter as you have to provide the function which retrieves the user.
fake_db = {'johndoe@e.mail': {'password': 'hunter2'}}
Now we have to provide the LoginManager
with a way to load our user. The
user_loader
callback should either return your user object or None
@manager.user_loader
def load_user(email: str): # could also be an asynchronous function
user = fake_db.get(email)
return user
Now we have to define a way to let the user login in our app. Therefore we will create a new route:
from fastapi import Depends
from fastapi.security import OAuth2PasswordRequestForm
from fastapi_login.exceptions import InvalidCredentialsException
@app.post('/auth/token')
def login(data: OAuth2PasswordRequestForm = Depends()):
email = data.username
password = data.password
user = load_user(email) # we are using the same function to retrieve the user
if not user:
raise InvalidCredentialsException # you can also use your own HTTPException
elif password != user['password']:
raise InvalidCredentialsException
access_token = manager.create_access_token(
data=dict(sub=email)
)
return {'access_token': access_token, 'token_type': 'bearer'}
Now whenever you want your user to be logged in to use a route, you can simply
use your LoginManager
instance as a dependency.
# this has to be set first in order to use the instance as dependency
manager.tokenUrl = '/auth/token'
@app.get('/protected')
def protected_route(user: Depends(manager)):
...
You can also set the tokenUrl as a argument when initiating LoginManager
.
manager = LoginManager(SECRET, App, tokenUrl="route/to/your/login/route")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for fastapi_login-1.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 712a90c527673ffd4f179ca39ccfdadd6f14d2b50f28f8dd4981ff8c3c0184ae |
|
MD5 | 4f2617d96a0a91307d1a85e3cd5b4e1d |
|
BLAKE2b-256 | 28d986e9324c105000ee035f7443caf2b2f6b55ad64f6ac857b97e440cc26c69 |