Obtenha o remote_addr correto no Heroku com o Flask

Então eu passei muito tempo demais depuração por que minha sessão foram expirando rapidamente no servidor estágio do Poderoso Primavera que roda em Heroku. Eu finalmente cavei fundo o suficiente com o registro para descobrir que remote_addrestava retornando um valor diferente a cada vez. Criei uma nova Requestclasse que retorna o correto remote_addrquando executado no Heroku.

HerokuRequest gist

from flask import Request


class HerokuRequest(Request):
"""
`Request` subclass that overrides `remote_addr` with Heroku's

HTTP_X_FORWARDED_FOR when available.

"""


@property
def remote_addr(self):
"""The remote address of the client."""
fwd
= self.environ.get('HTTP_X_FORWARDED_FOR', None)
if fwd is None:
return self.environ.get('REMOTE_ADDR')
# sometimes x-forwarded-for contains multiple addresses,
# actual client is first, rest are proxy
fwd
= fwd.split(',')[0]
return fwd


## use HerokuRequest class so we get real IPs
app
.request_class = HerokuRequest