使用Python社交身份验证只能获取令牌

Jan*_*Jan 10 python django oauth-2.0

我现在用的是梦幻般的Python的社会身份验证使用Django.
但是,此时,每次调用该进程时,都会创建一个新用户.我只需要来自进程的令牌(access_tokenrefresh_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')
Run Code Online (Sandbox Code Playgroud)

和相应的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',
)
Run Code Online (Sandbox Code Playgroud)

Ano*_*ous 7

是的,一切都在筹备中。如果你看看你已经拥有的东西,你甚至会看到这social.pipeline.user.create_user一步。

从文档

# Create a user account if we haven't found one yet.
'social.pipeline.user.create_user',
Run Code Online (Sandbox Code Playgroud)

该功能的来源

用您想要实现的任何内容替换它(如果您不需要它们,则替换所有以下步骤)。

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')
Run Code Online (Sandbox Code Playgroud)

即使没有用户存在/创建,修改后的方法也应该工作。