Wie melde ich mich in Fastapi-Login an?Python

Python-Programme
Anonymous
 Wie melde ich mich in Fastapi-Login an?

Post by Anonymous »

Ich habe eine grundlegende Website auf Fastapi. Ich möchte das Verhalten von Login/Logout (Auth) implementieren, das Flask-Login ähnelt, d. H. Zugriff auf eine Funktion/einen Pfad mit Dekorateur wie @login_required oder Fastapi Dependecy Injection. Es fehlt völlig logout < /p>
Also suche ich nach Hilfe, um den Abmeldung korrekt zu implementieren.

Code: Select all

├── app
│   ├── __init__.py
│   └── main.py
├── requirements.txt
└── templates
└── login.html.j2
< /code>
und Working App.main.py Code ohne Abmelden: < /p>
from fastapi.responses import RedirectResponse, HTMLResponse
from fastapi.security import OAuth2PasswordRequestForm
from fastapi_login import LoginManager
from fastapi_login.exceptions import InvalidCredentialsException
from fastapi.templating import Jinja2Templates
from sys import path

app = FastAPI()

SECRET = "secret-key"

templates = Jinja2Templates(directory="templates")

manager = LoginManager(SECRET, tokenUrl="/auth/login", use_cookie=True)
manager.cookie_name = "some-name"

DB = {"username": {"password": "1234567"}}  # unhashed

@manager.user_loader
def load_user(username: str):
user = DB.get(username)
return user

@app.post("/auth/login")
def login(data: OAuth2PasswordRequestForm = Depends()):
username = data.username
password = data.password
user = load_user(username)
if not user:
raise InvalidCredentialsException
elif password != user['password']:
raise InvalidCredentialsException
access_token = manager.create_access_token(
data={"sub": username}
)
resp = RedirectResponse(url="/private", status_code=status.HTTP_302_FOUND)
manager.set_cookie(resp, access_token)
return resp

@app.get("/private")
def getPrivateendpoint(_=Depends(manager)):
return "You are an authentciated user"

@app.get("/public")
def getPublicendpoint():
return "You are just a user"

@ app.get("/auth/login", response_class=HTMLResponse)
def login(request: Request):
context = {'request': request, }
return templates.TemplateResponse("login.html.j2", context)

< /code>
Ich habe versucht, Abmeldungsfunktion (unten) zu melden, aber es funktioniert nicht.  Es leitet nur die Anmeldeseite weiter, entfernen jedoch keinen Zugriff.  < /p>
@ app.get("/auth/logout", response_class=HTMLResponse)
def logout(request: Request):
response = RedirectResponse(url="/auth/login")
response.delete_cookie("Authorization", domain="localtest.me")
return response
< /code>
Ich vermute, dass etwas mit den Params delete_cookie nicht stimmt, aber keine Ahnung, welche Paramente aussehen sollen: < /p>
response.delete_cookie("Authorization", domain="localtest.me")
< /code>
Hier ist die Vorlage: < /p>







Username




Password




Sign In






Bitte helfen Sie beim Abmelden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post