/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)
Код: Выделить всё
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