我已成功设法使用django-socialauth
将帐户(在本例中为instagram帐户)与现有用户帐户相关联。我还设置了我的管道以收集其他用户详细信息:
def update_social_auth(backend, details, response, social_user, uid, user,
*args, **kwargs):
if getattr(backend, 'name', None) in ('instagram', 'tumblr'):
social_user.extra_data['username'] = details.get('username')
social_user.save()
首次关联帐户时,此功能非常有用。但是,如果该帐户已被关联,则username
中不会显示extra_data
字段。
如何在关联完成后更新用户的extra_data
?有没有办法使用django-socialauth
执行此操作而无需断开连接和重新连接,或使用帐户(例如Instagram的)API?
如果有帮助的话,这是我目前的管道:
SOCIAL_AUTH_PIPELINE = (
'social_auth.backends.pipeline.social.social_auth_user',
'social_auth.backends.pipeline.social.associate_user',
'social_auth.backends.pipeline.social.load_extra_data',
'social_auth.backends.pipeline.user.update_user_details',
'apps.utils.social.utils.update_social_auth'
)
答案 0 :(得分:0)
以下是我用于向现有Django用户添加“admin”和“staff”选项的代码片段;我不知道django-socialauth
或extra_data
字段,但我猜这样的内容可能适用:
:
userqueryset = User.objects.filter(username=user_name)
if not userqueryset:
print("User %s does not exist"%user_name, file=sys.stderr)
return am_errors.AM_USERNOTEXISTS
# Have all the details - now update the user in the Django user database
# see:
# https://docs.djangoproject.com/en/1.7/ref/contrib/auth/#django.contrib.auth.models.User
# https://docs.djangoproject.c om/en/1.7/ref/contrib/auth/#manager-methods
user = userqueryset[0]
user.is_staff = True
user.is_superuser = True
user.save()
:
FWIW,我的应用程序正在使用第三方身份验证(特别是atm OpenId Connect通过Google+),所以我认为这里有一些共同的目标。在我的情况下,我希望能够将Django管理员权限添加到已经创建的用户。
包含上述代码的完整模块位于github.com/gklyne/annalist/blob/develop/src/annalist_root/annalist_manager/am_createuser.py#L231