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
Mobile version