5

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'
)
4

1 に答える 1

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、私のアプリはサードパーティ認証 (具体的には Google+ 経由の atm OpenId Connect) を使用しているため、ここには共通の目標があると思います。私の場合、すでに作成されているユーザーに Django 管理者権限を追加できるようにしたいと考えています。

上記のコードを含む完全なモジュールは、github.com/gklyne/annalist/blob/develop/src/annalist_root/annalist_manager/am_createuser.py#L231にあります。

于 2014-11-09T11:07:44.743 に答える