Пользовательская модель пользователя с помощью python-social-auth на django

Я новичок в этом, поэтому извините, если мои вопросы покажутся глупыми. Я использую только steamopenid на python-social-auth для входа, это единственный вариант, который будет у клиента. Теперь я хочу создать свою собственную пользовательскую модель, в которой я смогу хранить данные пользователя после того, как он войдет в систему. Я считаю, что это не должно быть слишком сложным, но я не могу найти ничего, что кажется правильным.

Мне удалось получить имя пользователя, но я хочу также получить все, что находится под таблицей социальных аутов пользователя и таблицей пользователей. Поля, которые сохраняются в сгенерированной python-social-auth таблице: Database

settings.py

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.social_auth.associate_by_email',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
    'main.pipeline.save_profile',
)

pipeline.py

from .models import CustomUser


def save_profile(backend, user, response, *args, **kwargs):
    CustomUser.objects.create(
        user = user,
    )

models.py

from django.db import models
from django.conf import settings

# Create your models here.

class CustomUser(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

Вы создали модель, которая имеет ссылку на модель пользователя по умолчанию в django. Но я думаю, что вы хотите настроить свою собственную модель пользователя. Вариант, который я предпочитаю - это написать новую модель, которая наследуется от AbstractBaseUser, которая имеет всего несколько полей, и вы сможете добавить свои собственные необходимые поля (если вы хотите использовать админку сайта, убедитесь в добавлении is_staff, is_superuser и для лучшего контроля переопределите is_active).

Последним шагом будет изменение в settings.py для использования этой модели в качестве модели пользователя. I

from app.models impor NameModelUser
AUTH_USER_MODEL = 'app.NameModelUser'

Для получения дополнительной информации ознакомьтесь с документацией: Specifying a custom user model

Теперь, чтобы получить данные о паре, я создал функцию для использования в моем конвейере PSA. По сути, вам нужно только подставить правильные параметры и получить их данные. Пример:

def save_buyer(backend, response, details, user, *args, **kwargs) -> Dict[str, any]:
    """
    Parameters
    ----------
    backend: Union[GoogleOpenIdConnect, FacebookOAuth2, TwitterOAuth]
        Instance of the provider used to the authentication.
    response: Dict[str, str]
        The response of the Oauth request in json format.
    details: Dict[str, str]
        The response with user details in provider.
    user: Usuario
        Instance of the user (already registered).
    kwargs: Dict[str, bool]
        Distinct data about the execution of the pipeline.
    """
    last_name = details['last_name'] if details['last_name'] != '' else None
    if backend.name == 'facebook':
        MyUserModel(
            email=user,
            name=details['first_name'],
            last_name=last_name
        ).save()

Так что ключевыми являются детали, пользователь и даже ответ (для других данных). См. подробнее в Расширение конвейера.

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