DaftAcademy / daftacademy-python_levelup-spring2020

20 stars 10 forks source link

Wykład 3, zadanie 3 #27

Closed Calvitium closed 4 years ago

Calvitium commented 4 years ago

Czy ktoś mógłby mi pomóc? Nie wiem, z jakiego powodu logout nie przepuszcza testu na autoryzację przy takiej implementacji /login:


### TASK 2 ###########################################################
from hashlib import sha256
from starlette.responses import RedirectResponse
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from fastapi import Depends, Response
import secrets

security = HTTPBasic()
app.secret_key = "very constatn and random secret, best 64 characters, here it is."

session_tokens = []

@app.post("/login")
def get_current_user(response: Response, credentials: HTTPBasicCredentials = Depends(security)):
    correct_username = secrets.compare_digest(credentials.username, "trudnY")
    correct_password = secrets.compare_digest(credentials.password, "PaC13Nt")
    if not (correct_username and correct_password):
        raise HTTPException(status_code=401, detail="Incorrect email or password")
    session_token = sha256(bytes(f"{credentials.username}{credentials.password}{app.secret_key}", encoding='utf8')).hexdigest()
    response.set_cookie(key="session_token", value=session_token)
    session_tokens.append(session_token)
    return RedirectResponse(url='/welcome') 

### TASK 3 ###########################################################
from fastapi import Cookie

@app.post("/logout")
def logout(*, response: Response, session_token: str = Cookie(None)):
    if session_token not in session_tokens:
        raise HTTPException(status_code=401, detail="Unathorised")
    session_tokens.delete(session_token)
    return RedirectResponse("/")
```python 
mateusz94 commented 4 years ago

Spróbuj proszę ustawić sobie jedenego workera: https://github.com/daftcode/daftacademy-python_levelup-spring2020/issues/24

Calvitium commented 4 years ago

Niestety po dopisaniu do Procfile --workers 1, błąd ciągle ten sam:

Traceback (most recent call last): File "/home/runner/unit_tests.py", line 29, in test_test_logout self.assertTrue(r2.status_code in (307, 301, 302, 303)) AssertionError: False is not true

Będę wdzięczny za pomoc

https://github.com/Calvitium/d_jak_deploy

mateusz94 commented 4 years ago

podaj proszę URLa do swojej apki

Calvitium commented 4 years ago

https://diploj.herokuapp.com/docs

mateusz94 commented 4 years ago

hehe, nie zwracasz ciasteczka :)

curl -X POST "https://diploj.herokuapp.com/login" -H "accept: application/json" --user trudnY:PaC13Nt -vv

Calvitium commented 4 years ago

Okej, dzięki, myślałem, że to ciasteczko samo się zwraca w tym response. W takim razie mógłbym liczyć na jakiegoś małego hinta?

mateusz94 commented 4 years ago

hm, zobacz, nie zwracasz response, do którego zapisujesz ciasteczko, tylko nowy obiekt RedirectResponse, który go nie ma.

Calvitium commented 4 years ago

O matulu, zorientowałem się zaraz po zadaniu tego pytania. Tak czy siak, dzięki za szybką odpowiedź!