Das FastAPI-Backend gibt bei der Anmeldung immer HTTP 200 zurück (auch bei falschen Anmeldeinformationen) und nach der BPython

Python-Programme
Anonymous
 Das FastAPI-Backend gibt bei der Anmeldung immer HTTP 200 zurück (auch bei falschen Anmeldeinformationen) und nach der B

Post by Anonymous »

Ich habe ein React-Frontend, das mit einem Backend-Server kommuniziert. Wenn ich beides lokal ausführe und teste, funktioniert die Authentifizierung korrekt – fehlgeschlagene Anmeldeversuche geben entsprechende Fehlerstatus zurück (z. B. 401 oder 403). Nach der Bereitstellung beider auf einem Remote-Host gibt das Backend jedoch immer HTTP 200 mit der Meldung „Authentifizierung erfolgreich“ zurück, unabhängig davon, ob die Anmeldeinformationen gültig sind oder nicht.
/admin.auth.py

Code: Select all

from fastapi.routing import APIRouter
from fastapi.responses import JSONResponse, Response
from fastapi import Form, Request, Depends
from typing import Annotated
import bcrypt
import uuid

from admin.model import LoginFormData, UserSession
from database.depends import get_SQLManager

auth_router = APIRouter(prefix="/auth", tags=["admin"])

@auth_router.post("/login")
async def login(request: Request,
form_data: Annotated[LoginFormData, Form()],
db_manager=Depends(get_SQLManager)):

if request.session and request.session["role"] == "admin":
response = {"status": "success", "message": "login successful"}
return JSONResponse(content=response, status_code=200)

username = form_data.username
password = form_data.password

user = await db_manager.UserTable.get_user(username)
await db_manager.close()

if not user:
response = {"status": "fail", "message": "user does not exist"}
return JSONResponse(content=response, status_code=404)

password_encoded = password.encode("utf-8")
password_stored_encoded = user.password.encode("utf-8")
verified = bcrypt.checkpw(password_encoded, password_stored_encoded)

if not  verified:
response = {"status": "fail", "message": "login failed"}
return JSONResponse(content=response, status_code=404)

request.session["role"] = "admin"
response = {"status": "success", "message": "login successful"}
return JSONResponse(content=response, status_code=200)

@auth_router.post("/session")
async def login(request: Request):
if request.session and request.session["role"] == "admin":
response = {"status": "success", "message": "login successful"}
return JSONResponse(content=response, status_code=200)

return Response(status_code=403)
nginx.conf

Code: Select all

server {
listen 80;
server_name www.tomanshome.com tomanshome.com backend.tomanshome.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.3;
server_name www.tomanshome.com tomanshome.com;

ssl_certificate /etc/letsencrypt/live/www.tomanshome.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.tomanshome.com/privkey.pem;

add_header Content-Security-Policy "upgrade-insecure-requests;";

access_log /var/log/nginx/tomanshome.com.access.log;
error_log /var/log/nginx/tomanshome.com.error.log;

root /home/deploy/tomanshome.com;
index index.html;

add_header X-XSS-Protection "1; mode=block" always;

location / {
try_files $uri $uri/ /index.html;
}
}

server {
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.3;
server_name backend.tomanshome.com;

ssl_certificate /etc/letsencrypt/live/backend.tomanshome.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/backend.tomanshome.com/privkey.pem;

access_log /var/log/nginx/backend.tomanshome.com.access.log;
error_log /var/log/nginx/backend.tomanshome.com.error.log;

set $allowed_origin 'https://tomanshome.com';
proxy_intercept_errors off;

location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $allowed_origin always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
return 204;
}

proxy_pass http://127.0.0.1:8000;

proxy_pass_header Set-Cookie;
proxy_set_header Cookie $http_cookie;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

add_header 'Access-Control-Allow-Origin' 'https://tomanshome.com' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;

}
}
  • Was könnte dazu führen, dass FastAPI unabhängig von den Anmeldeinformationen nach der Bereitstellung immer HTTP 200 mit einer Erfolgsmeldung für die Authentifizierung zurückgibt?
  • Warum sollten Cookies nicht gesetzt werden, selbst wenn die Authentifizierung erfolgreich sein sollte?
Ich konnte keine praktikable Lösung für das Problem finden, daher wäre ich für jede Hilfe sehr dankbar!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post