2013-04-11 3 views
5

django-socialauthを使用してアカウント(この例では、図表アカウント)を既存のユーザーアカウントに関連付けることに成功しました。また、ユーザーの詳細を収集するために私のパイプラインをセットアップしました。ユーザーの `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() 

これは、アカウントが初めて関連付けられたときに効果的です。ただし、アカウントが既に関連付けられている場合、usernameフィールドはextra_dataに存在しません。

既に関連付けが行われた後にユーザーのextra_dataを更新するにはどうすればよいですか?django-socialauthを使用して、接続を解除して再接続したり、アカウント(例:Instagram's)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-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、私のアプリはそう、サードパーティの認証(Google+の経由特に気圧のOpenID接続)を使用しています私はここにいくつか共通の目標があると思います。私の場合は、既に作成されているユーザにDjangoの管理者権限を追加できます。

上記のコードを含むフルモジュールは、github.com/gklyne/annalist/blob/develop/src/annalist_root/annalist_manager/am_createuser.py#L231

です。
関連する問題