17

認証システムに django-allauth を使用しています。ユーザーがサインインすると、プロファイル モジュールにプロバイダー情報 (私の場合は facebook) が入力される必要があります。

pre_social_login シグナルを使用しようとしていますが、プロバイダー認証からデータを取得する方法がわかりません

from django.dispatch import receiver
from allauth.socialaccount.signals import pre_social_login

@receiver(pre_social_login)

def populate_profile(sender, **kwargs):
    u = UserProfile( >>FACEBOOK_DATA<< )
    u.save()

ありがとう!!!

4

4 に答える 4

23

pre_social_loginシグナルは、ユーザーがソーシャルプロバイダーを介して正常に認証された後、ログインが実際に処理される前に送信されます。このシグナルは、ソーシャルログイン、サインアップ、および追加のソーシャルアカウントをアカウントに接続するときに発行されます。

したがって、サインアップが完全に完了する前に送信されます。したがって、これは使用するのに適切な信号ではありません。

代わりにallauth.account.signals.user_signed_up、ローカルおよびソーシャルのすべてのユーザーに発行されるを使用することをお勧めします。

そのハンドラー内SocialAccountから、ユーザーに接続されているものをすべて検査できます。たとえば、Google +固有のデータを検査する場合は、次のようにします。

user.socialaccount_set.filter(provider='google')[0].extra_data

更新:sociallogin最新の開発バージョンでは、関連するすべての情報(ソーシャルアカウント、トークンなど)を直接含むパラメーターを渡すことで、これが少し便利になります。

于 2013-01-25T15:18:48.097 に答える