Middleware 가 모든 요청의 진입점. 라우트마다 decorator 를 다는 대신 여기에 auth 를 두면 새 라우트에 빼먹을 수가 없어. 새 엔드포인트는 기본으로 게이트를 물려받고, public 으로 열려면 따로 표시해야 해.
체크 순서가 중요해
Public 이 먼저야 (싸고 DB 도 안 건드려). 그다음 killswitch (PIN 이 꺼져 있나), bypass (싸), blacklist (DB 한 번, 걸리면 바로 return), session check (제일 느림), 마지막이 login redirect. 이미 알려진 나쁜 IP 한테 403 을 주는 게 session lookup 보다 싸거든.
진짜 client IP 얻기
reverse proxy 뒤에 있으면 request.client.host 는 진짜 client 가 아니라 proxy 의 IP 를 보여줘. X-Forwarded-For 헤더를 봐야 하는데, 그것도 네가 아는 proxy 에서 온 것만 믿어야 해.