Я создал конечную точку 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=