Я создаю приложение, которое позволяет клиентам и водителям подписываться через Facebook. Во время тестирования с использованием почтового менеджера мне удалось создать токены доступа. Однако, когда я тогда пошел создавать маркер доступа, который отличает, является ли пользователь клиентом или драйвером, я получаю эту ошибку в почтальоне. "KeyError в/API/социальной/Convert-маркер 'user_type'"KeyError at/api/social/convert-token
Я прошел все необходимые Params (т.е. client_id, client_secret, user_type, grant_type, бэкенд и FB лексема), так что это не является param проблема.
Мой settings.py является:
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',
'foodtaskerapp.social_auth_pipeline.create_user_by_type', # <--- 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',
)
и мой social_auth_pipeline.py выглядит следующим образом
from foodtaskerapp.models import Customer, Driver
def create_user_by_type(backend, user, request, response, *args, **kwargs):
if backend.name == 'facebook':
avatar = 'https://graph.facebook.com/%s/picture?type=large' % response['id']
if request['user_type'] == "driver" and not Driver.objects.filter(user_id=user.id):
Driver.objects.create(user_id=user.id, avatar = avatar)
elif not Customer.objects.filter(user_id=user.id):
Customer.objects.create(user_id=user.id, avatar = avatar)
Обе модели были созданы, а также в models.py.
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='customer')
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
def __str__(self):
return self.user.get_full_name()
class Driver(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='driver')
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
def __str__(self):
return self.user.get_full_name()
Почему я получаю сообщение об ошибке?
'request.POST.get ('user_type')'? –
Спасибо за быстрый ответ @KlausD. Я попробовал это и получил ошибку. Объект «dict» не имеет атрибута «POST». Я обнаружил, что когда я добавил «request ['user_type'] = ['driver', 'customer']" выше оператора if/elif, я избавился от ошибки user_type, но единственная проблема заключалась в том, что если бы я передал параметр как драйвер или клиент, он сохраняет только в Django в качестве клиента независимо от того, что – SMUstang21
Вы решили эту проблему? –