FastApi BasicAuth с проблемой перенаправления файлов cookie - PullRequest
0 голосов
/ 26 апреля 2020

каждый раз, когда я успешно захожу и хочу перенаправить на / добро пожаловать, я получаю сообщение об ошибке и не знаю почему.

Вот мой код:

import secrets
from typing import Dict
from fastapi import FastAPI, HTTPException, status, Depends, Cookie, Form, Response, Request
from pydantic import BaseModel
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from hashlib import sha256

app = FastAPI()
security = HTTPBasic()
app.secret_key = "very constatn and random secret, best 64 characters"
app.sessions= []

@app.get("/welcome")
def welcome(request: Request, token = Cookie(None)):
    if token in app.sessions:
        return {"message": "No hej"}
    else:
        raise HTTPException(status_code=401, detail="Login first")

@app.post("/login")
def Login(response: Response,credentials: HTTPBasicCredentials = Depends(security)):
    correct_username = secrets.compare_digest(credentials.username, "root")
    correct_password = secrets.compare_digest(credentials.password, "toor")
    if (correct_username and correct_password):
        session_token = sha256(bytes(f"{credentials.username}{credentials.password}{app.secret_key}", encoding='utf8')).hexdigest()
        response.status_code = status.HTTP_302_FOUND
        response.set_cookie(key="session_token", value=session_token)
        app.sessions += session_token
        response.headers['Location'] = "/welcome"
        return response
    else:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Incorrect login or password",
        )

А вот сообщение об ошибке:

response.set_cookie(key="session_token", value=session_token)
AttributeError: 'Response' object has no attribute 'set_cookie'

В / документы после входа в систему я получаю:

500 Internal Server Error

Если я переключаюсь / вход в систему с POST на GET и после входа в систему это показывает:

{"detail":[{"loc":["body","response"],"msg":"field required","type":"value_error.missing"}]}

Есть предложения?

...