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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi-login-1.1.0.tar.gz.
File metadata
- Download URL: fastapi-login-1.1.0.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.8.0 tqdm/4.31.1 CPython/3.7.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
233c7b6624dbddf7610fafb8b2e15fc916adf2578134e2f402cba09fecfb2504
|
|
| MD5 |
b59d21e9e459ada73f5c01e2815cc530
|
|
| BLAKE2b-256 |
9fc4bc0f92a4db188353e928636be1dc2e86caa548ce84b53506fefc144d3c57
|
File details
Details for the file fastapi_login-1.1.0-py3-none-any.whl.
File metadata
- Download URL: fastapi_login-1.1.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.8.0 tqdm/4.31.1 CPython/3.7.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
712a90c527673ffd4f179ca39ccfdadd6f14d2b50f28f8dd4981ff8c3c0184ae
|
|
| MD5 |
4f2617d96a0a91307d1a85e3cd5b4e1d
|
|
| BLAKE2b-256 |
28d986e9324c105000ee035f7443caf2b2f6b55ad64f6ac857b97e440cc26c69
|