Python Social Auth захват маркера доступа для пользователя

Я хочу создать пользовательского пользователя с именем пользователя, электронной почтой из социального конвейера, используя Google OAuth2. Если уже есть пользователь, связанный с этим email, именем пользователя, то просто прикрепите токен доступа к этому аккаунту, иначе создайте аккаунт, но он должен получить способ доступа к нему через pw после создания? Может быть, установить pw по умолчанию или просто удалить учетную запись после входа?

Я изучал конвейеры и увидел что-то вроде этого, где, если бэкенд был чем-то вроде facebook, я мог бы вывести значения в нового пользовательского пользователя.

{
    'username': 'foobar',
    'access_token': 'CAAD...',
    'first_name': 'Foo',
    'last_name': 'Bar',
    'verified': True,
    'name': 'Foo Bar',
    'locale': 'en_US',
    'gender': 'male',
    'expires': '5183999',
    'email': 'foo@bar.com',
    'updated_time': '2014-01-14T15:58:35+0000',
    'link': 'https://www.facebook.com/foobar',
    'timezone': -3,
    'id': '100000126636010',
}

трубопровод:

def save_profile(backend, user, response, *args, **kwargs):
    if backend.name == 'facebook':
        profile = user.get_profile()
        if profile is None:
            profile = Profile(user_id=user.id)
        profile.gender = response.get('gender')
        profile.save()

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.user.create_user',
    'path.to.save_profile',  # <--- set the path to the function
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
)

Мой текущий пользователь:

class Profile(AbstractUser):
    bio = models.TextField(max_length=100, blank=True,null=True)
    phone_number = PhoneNumberField(max_length=25, region='US')
    birth_date = models.DateField(blank = True, null = True) 
    is_doctor = models.BooleanField(default=False)
    date_created = models.DateTimeField(auto_now_add=True)
    avatar = models.ImageField(upload_to='avatar',null=True)
    verified = models.ImageField(blank=True, null=True,upload_to='doctor')

    gender_choices = (('others', 'Others'),('male', 'Male'),('female' ,'Female'))
    gender = models.CharField(max_length=10, choices=gender_choices,default='others')
    default_pic_mapping = { 'others': 'default.png', 'male': 'default.png', 'female': 'default.png'}

    def get_profile_pic_url(self):
        if not self.avatar:
            return static('img/{}'.format(self.default_pic_mapping[self.gender]))
        return self.avatar.url

Как лучше всего сделать так, чтобы созданный пользователь и социальный логин присоединялись к одному пользователю с маркером доступа и чтобы социальный логин был удален или доступен только после этого.

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