Автоматически обновлять токен доступа с помощью django-social-auth (omab)

В настоящее время я использую django-social-auth для управления регистрацией oauth2 с помощью google-oauth2 для доступа к Google Диску. Я добавил офлайн-доступ к своим extra_arguments. Поэтому Google возвращает токен обновления, и он сохраняется в django-social-auth. Проблема в том, что django-social-auth никогда не использует этот токен обновления для обновления токена доступа. Следовательно, токен доступа истекает через час, и я не могу использовать его для выполнения офлайн-запросов. Я хочу, чтобы access_token действовал 24/7, чтобы моя база данных синхронизировалась с каждым пользователем Google Drive.

GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {'access_type':'offline'}
GOOGLE_OAUTH_EXTRA_SCOPE = ['https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/userinfo.profile']

SOCIAL_AUTH_USER_MODEL = 'accounts.GoogleDriveUser'
SOCIAL_AUTH_EXTRA_DATA = True
SOCIAL_AUTH_SESSION_EXPIRATION = False

Есть ли способ заставить django-social auth обновлять access_token каждый раз, когда он истекает, используя refresh_token. Я хотел бы увидеть пример того, как можно решить эту проблему.


person Max Ferguson    schedule 16.10.2012    source источник


Ответы (2)


Похоже, что у объектов UserSocialAuth теперь есть метод .refresh_token (), который позволяет использовать .tokens и получить обновленный токен.

person mrooney    schedule 26.01.2013
comment
Извините, это означает, что этот .refresh_token будет вызываться автоматически по истечении срока действия access token? Или мне нужно вручную как-то узнать, что срок действия токена истек? - person Ivan Borshchov; 09.09.2016
comment
@ user3479125 Я считаю, что он должен обновляться автоматически, однако это также позволяет вам перехватывать такие исключения и обновлять себя, если этого не происходит в определенных крайних случаях :) - person mrooney; 13.09.2016

На данный момент нет возможности напрямую реализовать в django-social-auth (я поднял билет, чтобы отслеживать его https://github.com/omab/django-social-auth/issues/492), а между тем этот фрагмент сделает всю работу, его просто нужно немного улучшить, чтобы он соответствовал вашим потребностям.

person omab    schedule 17.10.2012