Jan*_*Jan 10 python django oauth-2.0
我现在用的是梦幻般的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')
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)
是的,一切都在筹备中。如果你看看你已经拥有的东西,你甚至会看到这social.pipeline.user.create_user一步。
从文档:
Run Code Online (Sandbox Code Playgroud)# 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')
Run Code Online (Sandbox Code Playgroud)
即使没有用户存在/创建,修改后的方法也应该工作。
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |