Подтвердить что ты не робот

Использовать социальный аудит Python для получения только токенов

Я использую фантастическую социальную авторизацию Python с помощью Django.
Однако на данный момент, каждый раз, когда процесс вызывается, создается новый пользователь. Мне нужны только токены (access_token и refresh_token) из процесса. Как это можно достичь? Через какой-то трубопровод?

Это мой код pipeline.py в данный момент (сокращенно):

def get_token(backend, user, response, *args, **kwargs):

    # get token from the oauth2 flow
    social = user.social_auth.get(provider='google-oauth2')
    access_token = social.extra_data['access_token']
    refresh_token = social.extra_data.get('refresh_token')

И соответствующий settings.py файл:

# set django session
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

# psa settings
SOCIAL_AUTH_URL_NAMESPACE = 'social'

# see http://psa.matiasaguirre.net/docs/configuration/settings.html
SOCIAL_AUTH_UUID_LENGTH = 32

AUTHENTICATION_BACKENDS = (
    #'social.backends.facebook.FacebookOAuth2',
    'social.backends.google.GoogleOAuth2',
    #'social.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
)

SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details',
    'social.pipeline.social_auth.social_uid',
    'social.pipeline.social_auth.auth_allowed',
    'social.pipeline.social_auth.social_user',
    'social.pipeline.user.get_username',
    'social.pipeline.user.create_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details',
    'youtube.pipeline.get_token',
)
4b9b3361

Ответ 1

Да, все это в конвейере. Если вы посмотрите на то, что у вас уже есть, вы даже увидите шаг social.pipeline.user.create_user.

Из документации:

# Create a user account if we haven't found one yet.
'social.pipeline.user.create_user',

(источник для этой функции)

Замените это (и все следующие шаги, если они вам не нужны) с тем, что вы пытаетесь достичь.

def get_token(backend, uid, *args, **kwargs):
    # get token from the oauth2 flow
    provider = backend.name
    social = backend.strategy.storage.user.get_social_auth(provider, uid)
    access_token = social.extra_data['access_token']
    refresh_token = social.extra_data.get('refresh_token')

Измененный метод должен работать, даже если пользователь не существует/не создан.