Python /api/social/convert令牌处的键错误

Python /api/social/convert令牌处的键错误,python,django-socialauth,Python,Django Socialauth,我正在开发一个应用程序,让客户和司机通过Facebook登录。在使用postman进行测试时,我能够创建访问令牌。然而,当我创建一个访问令牌来区分用户是客户还是驱动程序时,我在postman中发现了这个错误。“在/api/social/convert令牌处出现KeyError “用户类型” 我已经传递了所有必要的参数(即客户机id、客户机机密、用户类型、授权类型、后端和FB令牌),因此这不是参数问题 My settings.py是: SOCIAL_AUTH_PIPELINE = ( 's

我正在开发一个应用程序,让客户和司机通过Facebook登录。在使用postman进行测试时,我能够创建访问令牌。然而,当我创建一个访问令牌来区分用户是客户还是驱动程序时,我在postman中发现了这个错误。“在/api/social/convert令牌处出现KeyError “用户类型”

我已经传递了所有必要的参数(即客户机id、客户机机密、用户类型、授权类型、后端和FB令牌),因此这不是参数问题

My 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',
)
在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()

为什么我会出错

编辑按类型创建用户()方法来解决此问题:

def create_user_by_type(backend, user, response, *args, **kwargs):
request = backend.strategy.request_data()
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)

request.POST.get('user\u type')
?感谢@KlausD的快速响应。我试过了,得到了一个错误“'dict'对象没有属性'POST.”当我在if/elif语句上面添加“request['user\u type']=['driver','customer']”时,我发现我消除了user\u type错误,但唯一的问题是如果我作为driver或customer传递参数,无论您解决了这个问题,它都只作为客户在Django中保存?
def create_user_by_type(backend, user, response, *args, **kwargs):
request = backend.strategy.request_data()
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)