Как сохранить username пользователя в модель, а не email при авторизации через google-oauth2 в django-social-auth?
В моём проекте кастомная модель User. Проблема следующая: при авторизации через google-oauth2 в поле username по дефолту сохраняется гугловский email пользователя, но мне нужно чтобы туда сохранялся nickname. Также, меня мучает вопрос как получить все остальные данные авторизовавшегося юзера, например: аватар, настоящее имя и т.д. Я в первый раз работаю с API внешних ресурсов, поэтому не очень понимаю как это реализовывать. Благодарю за любую помощь :)
models.py
from django.db import models
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.core.validators import FileExtensionValidator
import os
class User(AbstractUser):
USERNAME_FIELD = 'username'
email = models.EmailField(max_length=255, unique=True, verbose_name='Email')
password = models.TextField(verbose_name='Password')
name = models.CharField(max_length=100, verbose_name='Name')
username = models.CharField(max_length=100, verbose_name='Username', unique=True)
registered_at = models.DateTimeField(verbose_name='Registered', auto_now_add=True)
avatar = models.ImageField(
validators=[ FileExtensionValidator(allowed_extensions=['png', 'jpg', 'jpeg', 'svg', 'gmp']), ],
upload_to='avatars/%Y/%m', verbose_name='Avatar', blank=True,
default=os.path.join(settings.BASE_DIR, 'media/default_pictures/default_avatar.jpg')
)
subscribers = models.ManyToManyField(
'self', related_name='subscriptions',
verbose_name='Subscribers'
)
notifications = models.ManyToManyField(
'self', related_name='notified',
verbose_name='Notifications'
)
viewed_videos = models.ManyToManyField(
'videos.Video', related_name='viewed_by',
verbose_name='Viewed videos'
)
liked_videos = models.ManyToManyField(
'videos.Video', related_name='liked_by',
verbose_name='Liked videos'
)
disliked_videos = models.ManyToManyField(
'videos.Video', related_name='disliked_by',
verbose_name='Disliked videos'
)
views.py
class Login(LoginView):
authentication_form = LoginForm
template_name = 'accounts/login.html'
def get(self, request, *args, **kwargs):
print(dir(social_django))
if request.user.is_authenticated:
messages.warning(request, 'You are already logged in as {}'.format(request.user.username))
return redirect('home')
else:
return super(Login, self).get(request, *args, **kwargs)
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = "Authentication"
if not self.request.GET.get('next'):
context['next'] = reverse('home')
else:
context['next'] = self.request.GET.get('next')
self.request.session['next'] = context['next'] # add 'next' to the session, to use for redirection AFTER REGISTRATION
return context
def form_valid(self, form):
messages.success(self.request, 'You authorized successfully!')
return super(Login, self).form_valid(form)
login.html
<a class="google-oauth" href="{% url 'social:begin' 'google-oauth2' %}">
<img src="{% static 'images/social_icons/google-icon.png' %}" data-toggle="tooltip">
</a>