1, вероятно, путь. Вы можете переопределить метод get_user_details класса Backend для социальных провайдеров, с которыми у вас возникли проблемы, и извлечь имя пользователя оттуда.
Это будет выглядеть примерно так, например, для 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», и будет использовать это в качестве имени пользователя для новой учетной записи.
Если вам нужен больший контроль, попробуйте переопределить метод «username» бэкэнда.
При переопределении бэкэнда не забудьте добавить его в AUTHENTICATION_BACKENDS в settings.py. Кроме того, я не уверен, как именно это работает, но я думаю, что вам нужно добавить что-то подобное в файл с вашим пользовательским бэкэндом, чтобы social-auth правильно связал ваш бэкэнд:
BACKENDS = {
'facebook': CustomFacebookAuth,
}