Cors – python flask on Dokku

파이썬 개 똥언어

서버가 오류나뒈지면서 에러메시지 처리도 제대로 안되고
코드 중간에 오류나면 오류는 처먹고 뒤져버린다

솔직히 연습용으로는 좋다. 구석구석 에러가 나니까 개발할 때 프로토콜은 잘 배울 수 있겠다
라이브러리도 죄다 쓰레기라 하나하나 손봐서 써야되고 커스텀도 불가능한 구조로 만들어진 경우가 많아 pip고 뭐고 그냥 복사붙여넣기 해서 수정해야 하는 경우가 많다

이런 심플함(좆도없음)이 파이썬의 장점이라고 하니까

이쓔상황

Dokku에서 돌리는 Flask 서버에서 Cors가 난다고 한다.
swagger에서는 괜찮은데 react 클라이언트에서만 발생

문제는 뭘까? 의심가는 부분은..

  1. flask cors가 쓰레기라 제대로 동작을 안한다
  2. nginx reverse proxy가 제대로 일을 못한다
  3. 클라이언트가 코딩을 제대로 못했다
  4. 리엑트는 원래 병신 쓰레기라 아무 오류나 나온다

1번체크

curl \
--verbose \
--request OPTIONS \
'https://dokku-api-server' \
--header 'Origin: http://localhost:3000' \
--header 'Access-Control-Request-Headers: Origin, Accept, Content-Type' \
--header 'Access-Control-Request-Method: GET'

2번체크

/home/dokku/api-server/nginx.conf

별 이상없어보인다

3번체크

실행…
서버 호출을 잘못하기는 했는데…
서버오류가 cors가 아닌데 cors라고 나오는게 문제고

4번체크

????

추가체크

서버로그를 보니 flask jwt인증부분을 손을 댔는데 여기서 오류가 난 모양…
헤더가 안 들어올 때 401을 내려줘야하는데 그러질 못하고 있다
서버에서 응답이 없으면 cors가 뜨나? http 프로토콜문제인지 리엑트가 원래 병신인지 잘 모르겠다.

리엑스에서 cors오류발생시 리엑트와 플라스크서버가 모두 병신일 수 있다는걸 기억하자

Python Flask 관련기술

파이썬 전반적인 부분과는 별개로 Flask 사용할 때 필요한 부분들

파이썬으로 복잡한 API 는 만들지 말자. 금지기술

역겨운 부분

app.py에는 db(Flask-Sqlalchemy), flask_app(Flask), jwt(Flask-JWT)
server.py에서 app.py를 본다. server.py는 models.module을 본다. server.py에는 jwt custom이 들어간다.
routes.module에서 app.py를 본다
models.module에서 app.py를 본다

jwt custom decorator는 어디다 넣어야되나
파이썬은 규모있는 API를 만든건 처음이긴한데
파이썬은 그냥 한개파일에 쑤셔넣을 정도 사이즈로만 사용해야 하는거 아닐까

로그인

  • Flask-JWT
    업데이트 안됨. extended와 pyjwt 의존성 버전충돌
    개인적으로는 아래것들도 안쓰고 코드를 퍼다가 프로젝트에 넣고 사용함
  • Flask-JWT-Extended
  • Flask-JWT-Simple
  • flask-bcrypt
  • Flask-Login
  • Flask-User
  • Flask-Security

API

  • Flask-CORS
  • Flask-Restful
  • Flask-Restplus
  • Flask-RESTX
    위에 두는 폐기.. 해야하겠지만 의존성 문제가 있으려나

Validation

  • cerberus
  • Flask-Validator

Doc

Test

  • unittest
  • pytest

StarterKit

  • https://github.com/lingthio/Flask-User-starter-app.git