Как сохранить 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>

Ответы (0 шт):