Серверная часть FastAPI всегда возвращает HTTP 200 при входе в систему (даже с неправильными учетными данными), и после Python

Программы на Python
Ответить
Anonymous
 Серверная часть FastAPI всегда возвращает HTTP 200 при входе в систему (даже с неправильными учетными данными), и после

Сообщение Anonymous »

У меня есть интерфейс React, взаимодействующий с внутренним сервером. Когда я запускаю и тестирую обе системы локально, аутентификация работает правильно — неудачные попытки входа возвращают соответствующие статусы ошибок (например, 401 или 403). Однако после развертывания обоих на удаленном хосте серверная часть всегда возвращает HTTP 200 с сообщением «аутентификация успешна», независимо от того, действительны ли учетные данные или нет.
/admin.auth.py

Код: Выделить всё

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

Код: Выделить всё

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;

}
}
  • Что может привести к тому, что FastAPI всегда будет возвращать HTTP 200 с сообщением об успешной аутентификации независимо от учетных данных после развертывания?
  • почему файлы cookie не устанавливаются даже для того, что должно быть успешной аутентификацией?
Я не смог найти реального решения этой проблемы, поэтому буду очень признателен за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/798 ... dentials-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»