gpt4 book ai didi

django-social-auth 通过 facebook_id 以编程方式创建新用户

转载 作者:行者123 更新时间:2023-12-04 03:35:17 24 4
gpt4 key购买 nike

有没有什么方法可以创建 User 和 UserSocialAuth 对象而无需实际登录,但只有您要为其创建帐户的用户的 FACEBOOK_ID?

我正在创建一个简单的应用程序,用户可以在其中从 FB 中选择一个 friend 并为他创建一些模型对象。由于我引用了用户实体,因此我需要知道该 friend 是否已注册。如果不是,我需要以编程方式创建整个对象图。可以使用 django-social-auth 的标准功能,还是应该手动在“auth_user”和“social_auth_usersocialauth”中创建记录?

最佳答案

使用此自定义后端将用户名设置为该人的 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 字段轻松引用的用户。

此外,当那个“ friend ”来了并在以后加入您的站点时(使用 SocialAuth),他们将自动获得此用户对象,并且您的内部图表将保持准确。

关于django-social-auth 通过 facebook_id 以编程方式创建新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com