Instagram автоматически обновляет URI перенаправления, отправляющий код oauth2

Я разместил свой проект django на pythonanywhere, сайте бесплатного хостинга. Код отлично работает в локальной сети и в Интернете, но почему-то возникла проблема с аутентификацией в instagram.

Instagram использует систему аутентификации oauth2, в которой, когда пользователь разрешает ваше приложение, оно перенаправляет пользователя на указанный URI и добавляет код внутри URL, который в дальнейшем может быть использован для аутентификации пользователя.

Instagram не позволяет использовать localhosts в качестве допустимого URL перенаправления, поэтому для тестирования я использовал что-то вроде этого

InstaAuth.html

<script>
        history.pushState(null, null, '?code=AQD_4...q6#_');
        function reloadThePage() {
            window.location.reload();
        }
</script>
<button type="submit" class="btn btn-primary" onclick="reloadThePage()">Continue</button>

, который изменяет состояние url, но не обновляет его. Затем у меня есть кнопка, которая обновляет текущую страницу, которая непосредственно вызывает нижеприведенный код в моем views.py и получает код через request.GET['code'].

Views.py

def instaAuth(request):
    if 'code' in dict(request.GET).keys():

        code = request.GET['code']
        print('the given code is', code)
        core = instaCore()
        user_id, short_lived_access_token = core.code_to_short_access_with_userid(code_string=code)
        print(user_id)
        obj = InstaModel.objects.get(username=request.user)
        obj.instagram_userid = user_id
        obj.short_lived_access_token = short_lived_access_token
        obj.is_active = True
        obj.save()

        print('all data saved!')
        messages.success(request, "Your instagram is connected!")
        return render(request, 'authentication/success.html')

    return render(request, 'authentication/instaAuth.html')

Вышеприведенный код работает отлично, когда я добавляю код с помощью метода pushState и обновляю страницу с помощью кнопки. но когда я делаю то же самое в моем webapp, авторизую приложение и затем нажимаю кнопку продолжить, он проходит через KeyError at /instaAuth 'access_token'.

Эта ошибка обычно возникает, когда кто-то пытается использовать один и тот же oauth code более одного раза. Когда я заглянул в журналы, я обнаружил ошибку в той же строке, где я обменивался кодом oauth с маркером доступа. Я попытался заглянуть в сетевую вкладку запросов, но не уверен, что именно пропало. Я делал подобное, используя streamlit, и все работало нормально, вы можете проверить приложение streamlit здесь https://instalogintest.herokuapp.com/

Я застрял на этом месте, я хочу иметь некоторую логику, которая либо не обновляет страницу, либо способ, которым django знает, что этот запрос приходит из Instagram и проверяет пользователя с помощью кода.

Проблема решена после того, как я целый день все просматривал. Не могу поверить, что это была такая маленькая ошибка.

Я не менял redirect uri при обмене code на access_token.

Проблема была в том, что я не выводил ошибку, она всегда проходила через блок попыток и ошибок, больше никогда не буду делать то же самое.

Всегда используйте этот синтаксис

try
   do_something()
except Exception as e:
   print(e)
   do_something_else()
Вернуться на верх