ユーザー名をその人の FACEBOOK_ID に設定するこのカスタム バックエンドを使用します。
from social_auth.backends.facebook import FacebookBackend
class IDFacebookBackend(FacebookBackend):
"""Facebook OAuth2 authentication backend"""
def get_user_details(self, response):
"""Return user details from Facebook account"""
return {'username': response.get('id'),
'email': response.get('email', ''),
'fullname': response.get('name', ''),
'first_name': response.get('first_name', ''),
'last_name': response.get('last_name', '')}
get_username
の代わりに、認証パイプラインでこのバージョンの を使用しますsocial_auth.backends.pipeline.user.get_username
def get_username(details, user=None, *args, **kwargs):
" Make Username from User Id "
if user:
return {'username': UserSocialAuth.user_username(user)}
else:
return details['username']
パイプラインは次のようになります。
SOCIAL_AUTH_PIPELINE = (
'social_auth.backends.pipeline.social.social_auth_user',
'our_custom_auth.get_username', # <= This should be the previous function
'social_auth.backends.pipeline.user.create_user',
'social_auth.backends.pipeline.social.associate_user',
'social_auth.backends.pipeline.social.load_extra_data',
'social_auth.backends.pipeline.user.update_user_details'
)
次に、呼び出すUser.objects.create(username=friends_facebook_id)
だけで、ユーザー名/パスでログインできないユーザーがいますが、ForeignKey フィールドから簡単に参照できます。
また、後日その「友達」があなたのサイトに来て (SocialAuth を使用して) 参加すると、自動的にこの User オブジェクトが与えられ、内部グラフは正確に保たれます。