2013-04-11 142 views
5

我已成功設法使用django-socialauth將帳戶(本例中爲instagram帳戶)與現有用戶帳戶相關聯。我還設置了我的管道以收集其​​他用戶詳細信息:如何在與帳戶關聯後更新用戶的`extra_data`?

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() 

這對第一次關聯帳戶時效果很好。但是,如果帳戶已關聯,字段將不會出現在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

這裏的代碼片段我使用添加「管理」和「工作人員」選項到現有的Django用戶;我不知道django-socialauthextra_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,我的應用程序是使用第三方認證(通過Google+專ATM ID連接),所以我認爲這裏有一些共同的目標。就我而言,我希望能夠將Django管理權限添加到已經創建的用戶。

包含上述代碼的完整模塊位於github.com/gklyne/annalist/blob/develop/src/annalist_root/annalist_manager/am_createuser.py#L231

相關問題