使用此自定义后端将用户名设置为人员的 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),他们将自动获得此用户对象,并且您的内部图表将保持准确。