Python 在使用django和django social auth时,如何向用户显示设置用户名的表单
我一直在使用django social auth(https://github.com/omab/django-social-auth),并取得了一些成功——从Twitter和Facebook登录已经很容易地建立起来了。然而,当我从一些OpenID提供商登录时,我面临一个空的用户名变量,而social auth应用程序允许这样做(尽管我已经设置了social_auth_DEFAULT_username) 虽然如果SOCIAL_AUTH_DEFAULT_USERNAME工作正常,这可能是一个临时解决方案,但理想情况下,我宁愿它由openID提供程序自动设置。基本上,我只剩下两种可能的解决方案: 1) 创建一个自定义方法来提取从openID提供程序发送的一些额外数据,从而从中设置用户名。 2) 强制用户在首次登录时设置用户名 虽然(2)不那么优雅,但它可以确保每次都插入用户名,并且还避免了对自动信息进行某些后处理的需要,这些信息可能不适合用户名的格式 我的问题是,我该如何着手实施上述任何一项!完整的答案是没有必要的,但一个方法的指针将不胜感激 另一种选择是玩django socialregistration,看看这是否会让生活更轻松Python 在使用django和django social auth时,如何向用户显示设置用户名的表单,python,django,django-socialauth,socialauth,Python,Django,Django Socialauth,Socialauth,我一直在使用django social auth(https://github.com/omab/django-social-auth),并取得了一些成功——从Twitter和Facebook登录已经很容易地建立起来了。然而,当我从一些OpenID提供商登录时,我面临一个空的用户名变量,而social auth应用程序允许这样做(尽管我已经设置了social_auth_DEFAULT_username) 虽然如果SOCIAL_AUTH_DEFAULT_USERNAME工作正常,这可能是一个临时解
J1可能是正确的选择。您可以覆盖后端类的get_user_details方法,用于您遇到问题的社交提供商,并从中提取用户名 它看起来像这样,比如Facebook:
from social_auth.backends.facebook import FacebookBackend
class CustomFacebookBackend(FacebookBackend):
name = 'facebook'
def get_user_details(self, response):
"""Return user details from Facebook account"""
return {'username': response['name'],
'email': response.get('email', ''),
'first_name': response.get('first_name', ''),
'last_name': response.get('last_name', '')}
“response”变量是从请求返回给OAuth提供程序的反序列化数据,用于获取用户详细信息,因此您可以从中提取所需的任何内容,或者在此处插入您自己的值。social auth将接受您在“用户名”中粘贴的任何内容,并将其用作新帐户的用户名。
如果您想要更多的控制,您也可以尝试覆盖后端的“username”方法
重写后端时,不要忘记将其添加到settings.py中的AUTHENTICATION\u BACKENDS。此外,我不确定这到底是如何工作的,但我认为您需要在自定义后端的文件中添加类似的内容,以便让social auth正确链接您的后端:
BACKENDS = {
'facebook': CustomFacebookAuth,
}