Issues on POST requests made to oauth2 endpoint by application after deployment on Railway

zihao1319
HOBBY

3 months ago

I'm facing an issue with internal requests made from within my Django backend while it's deployed on Railway. These requests work perfectly locally, but when I deploy the app to Railway, I get a 500 Internal Server Error for API calls like /o/token/

Issue:

  • My backend is making requests to itself (like to /o/token/ for OAuth), and while it works locally, the request results in a 500 error when deployed on Railway.

  • The backend is using requests.post() to the oauth2 authentication to retrieve access tokens, but it seems to be failing in production.

What I’ve Tried:

  1. Request Handling:

    • I’m using requests.post() to make requests from within the Django app to other endpoints (e.g., /o/token/ for OAuth).

    • I’ve confirmed that these requests work perfectly on localhost (both the authentication and token retrieval).

The sample error logs:

May 17 10:19:46

response = response or self.get_response(request)

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner

May 17 10:19:46

response = get_response(request)

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/corsheaders/middleware.py", line 56, in call

May 17 10:19:46

result = self.get_response(request)

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/requests/sessions.py", line 703, in send

May 17 10:19:46

r = adapter.send(request, **kwargs)

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/requests/adapters.py", line 667, in send

May 17 10:19:46

resp = conn.urlopen(

May 17 10:19:46

^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/urllib3/connectionpool.py", line 787, in urlopen

May 17 10:19:46

response = self._make_request(

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/urllib3/connectionpool.py", line 534, in makerequest

May 17 10:19:46

response = conn.getresponse()

May 17 10:19:46

^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/urllib3/connection.py", line 516, in getresponse

May 17 10:19:46

httplib_response = super().getresponse()

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/root/.nix-profile/lib/python3.12/http/client.py", line 1428, in getresponse

May 17 10:19:46

response.begin()

May 17 10:19:46

File "/root/.nix-profile/lib/python3.12/http/client.py", line 331, in begin

May 17 10:19:46

version, status, reason = self._read_status()

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/root/.nix-profile/lib/python3.12/http/client.py", line 292, in readstatus

May 17 10:19:46

line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/root/.nix-profile/lib/python3.12/socket.py", line 720, in readinto

May 17 10:19:46

return self._sock.recv_into(b)

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/root/.nix-profile/lib/python3.12/ssl.py", line 1251, in recv_into

May 17 10:19:46

return self.read(nbytes, buffer)

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/root/.nix-profile/lib/python3.12/ssl.py", line 1103, in read

May 17 10:19:46

return self._sslobj.read(len, buffer)

May 17 10:19:46

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

May 17 10:19:46

File "/opt/venv/lib/python3.12/site-packages/gunicorn/workers/base.py", line 204, in handle_abort

May 17 10:19:46

sys.exit(1)

May 17 10:19:46

SystemExit: 1

$10 Bounty

2 Replies

devparapalli
HOBBY

3 months ago

Can you please share a code snippet of where you are making the request and where the request is being handled ?


devparapalli

Can you please share a code snippet of where you are making the request and where the request is being handled ?

zihao1319
HOBBY

3 months ago

response = self.__get_oauth_token(authenticated_user.username, password)
def __get_oauth_token(self, username, password):
        data = {
            'grant_type': 'password',
            'username': username,
            'password': password,
            'client_id': settings.FRONTEND_CLIENT_ID,
            'client_secret': settings.FRONTEND_CLIENT_SECRET,
        }

        url = f"{settings.OAUTH2_URL}"
        logger.info(f"Making request to OAuth token endpoint: {url}")
        print(f"Making request to OAuth token endpoint: {url}")
        response = requests.post(url="https://my-railway-url/o/token/", data=data, verify=False)

I have isolated the issue, the POST request to the o/token/ endpoint for oauth2 authentication is giving errors...i have tried making verify=True, but it just doesnt work....it gives the error: 

Traceback (most recent call last):

  File "/opt/venv/lib/python3.12/site-packages/gunicorn/workers/sync.py", line 134, in handle

    self.handle_request(listener, req, client, addr)

  File "/opt/venv/lib/python3.12/site-packages/gunicorn/workers/sync.py", line 177, in handle_request

    respiter = self.wsgi(environ, resp.start_response)

               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/wsgi.py", line 124, in __call__

    response = self.get_response(request)

               ^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 140, in get_response

    response = self._middleware_chain(request)

               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner

    response = get_response(request)

               ^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/django/utils/deprecation.py", line 129, in __call__

    response = response or self.get_response(request)

                           ^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner

    response = get_response(request)

    resp = self.send(prep, **send_kwargs)

               ^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/whitenoise/middleware.py", line 123, in __call__

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    return self.get_response(request)

  File "/opt/venv/lib/python3.12/site-packages/requests/sessions.py", line 703, in send

           ^^^^^^^^^^^^^^^^^^^^^^^^^^

    r = adapter.send(request, **kwargs)

  File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner

        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    response = get_response(request)

               ^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/requests/adapters.py", line 667, in send

    resp = conn.urlopen(

  File "/opt/venv/lib/python3.12/site-packages/django/utils/deprecation.py", line 129, in __call__

           ^^^^^^^^^^^^^

    response = response or self.get_response(request)

  File "/opt/venv/lib/python3.12/site-packages/urllib3/connectionpool.py", line 787, in urlopen

                           ^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner

    response = self._make_request(

    response = get_response(request)

               ^^^^^^^^^^^^^^^^^^^

               ^^^^^^^^^^^^^^^^^^^^^

  File "/opt/venv/lib/python3.12/site-packages/urllib3/connectionpool.py", line 534, in _make_request

  File "/opt/venv/lib/python3.12/site-packages/corsheaders/middleware.py", line 56, in __call__