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
Как лучше всего сделать так, чтобы созданный пользователь и социальный логин присоединялись к одному пользователю с маркером доступа и чтобы социальный логин был удален или доступен только после этого.