Как связать аутентифицированного по Google OAuth2 пользователя с клиентом в django?

У меня проблема с регистрацией пользователей в Google, так как пользователи связаны с клиентом, и я не знаю, как сделать эти отношения с зарегистрированным пользователем через Google OAuth2. Я создал отношения пользователя с клиентом, но без использования аутентификации пользователя в Google. Теперь я хочу сделать такие же отношения, но для пользователя, который зарегистрировался через Google OAuth2.

Вот мой код:

signIn.html

<form action="{% url 'signIn' %}" method="POST"> 
    {% csrf_token %}
    <div class="mb-3">
        <a href="{% provider_login_url 'google' method = 'oauth2' %}">Sign in with google</a>
    </div>
</form>

views.py

def signIn(request):
    
    if request.method == "POST":
        form = SignInUserForm(request.POST)
        
        if form.is_valid():
            formSave = form.save()
            
            Customer.objects.create(
                user = formSave,
                name = formSave.username,
                email = formSave.email
            ) 
            
            user = form.cleaned_data['username']
            key = form.cleaned_data['password1']
            credentials = authenticate(username=user, password=key)
            
            
            login(request, credentials)
            
            messages.success(request, ("Successful!"))
            return redirect('store')
    else: 
        form = SignInUserForm()
        
    context = {'form': form}
    return render(request, 'caliza/signIn.html', context)

urls.py

urlpatterns = [
    path('accounts/', include('allauth.urls')),
    path('logout', LogoutView.as_view()),
]

models.py

class Customer(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, related_name = 'customer', null = True, blank = True)
    name = models.CharField(max_length = 80, null = True)
    email = models.CharField(max_length = 50, null = True)

    def __str__(self):
        return self.name

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

    'caliza.apps.CalizaConfig',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend'
]

SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': [
            'profile',
            'email',
        ],
        'AUTH_PARAMS': {
            'access_type': 'online',
        }
    }
}

SITE_ID = 1

LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'

Я буду очень благодарен, если вы сможете мне помочь.

Вернуться на верх