Как убрать косые черты внутри хешированного ключа в DRF API Key или есть ли способ принять косые черты в urls.py? - PullRequest
0 голосов
/ 22 октября 2019

Я создал конечную точку API в Django для генерации ключа API с помощью модуля ключей DRF API. Проблема возникает иногда. Если сгенерированный ключ содержит косую черту, он не может быть получен другой конечной точкой API. Нет проблем, если я создам его на стороне администратора Django.

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

#models.py

class UserCompanyAPIKeyManager(BaseAPIKeyManager):
    key_generator = KeyGenerator(prefix_length=32, secret_key_length=32)

class UserCompanyAPIKey(AbstractAPIKey):
    objects = UserCompanyAPIKeyManager()

    #some fields

    @classmethod
    def generate_prefix(self) -> str:
        key_generator = UserCompanyAPIKey.objects.key_generator
        try:
            key, prefix, hashed_key = key_generator.generate()
        except ValueError:  # Compatibility with < 1.4
            key, hashed_key = self.key_generator.generate()  # type: ignore
            pk = hashed_key
            prefix, hashed_key = split(hashed_key)
        else:
            pk = concatenate(prefix, hashed_key)

        return pk, prefix, hashed_key



#serializers.py

class UserCompanyAPISerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        pk, prefix, hashed_key = self.Meta.model.generate_prefix()
        validated_data['prefix'] = prefix
        validated_data['id'] = pk
        validated_data['hashed_key'] = hashed_key
        return super().create(validated_data)

    class Meta:
        model = UserCompanyAPIKey
        fields = ['id', 'name', 'expiry_date', 'user', 'company']

Рабочий вывод

us5z0Faxg2zEPDo99NmAOgEsf70MpHVb.pbkdf2_sha256$150000$RmkU1OFLKEtW$2YIEK7cZztwVjbqAEoQRLDzxujfTlQ2Fwx4skp2o1nk=

Проблема (с косой чертой)

eKi7lj4AvTEgorF7iKiFrzxQZlVD196C.pbkdf2_sha256$150000$ri39ifY6bmDj$DKQHFhTYQOzpEph6v8BUwbdxO/FcLjqDZa/nzq+ujJY=
...