Есть ли другой способ создать ключ API в Django? - PullRequest
1 голос
/ 16 октября 2019

Я создаю тестовое приложение в Django, которое генерирует API-ключ, используя модуль Django RestFramework API Key. (См. Здесь: https://florimondmanca.github.io/djangorestframework-api-key/)

Я хочу включить некоторые символы или дефис в середину сгенерированного ключа.

Я пробовал генератор ключей по умолчанию в модуле, но хочу сделатьэто более безопасно.


#models.py

from rest_framework_api_key.models import BaseAPIKeyManager
from rest_framework_api_key.crypto import KeyGenerator
from rest_framework_api_key.models import AbstractAPIKey

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

class UserCompanyAPIKey(AbstractAPIKey):
    objects = UserCompanyAPIKeyManager()

Вывод:

Префикс = jlxGg6bnRdjtrW3Xr6Q6yUMKWAuc0D2u

1 Ответ

0 голосов
/ 16 октября 2019

Глядя на KeyGenerator источник, вы можете переопределить свой KeyGenerator класс.

class CustomKeyGenerator(KeyGenerator):
    def get_prefix(self) -> str:
        return 'your_prefix'

    def get_secret_key(self) -> str:
        return 'your_secret_key'

    # Below, you can modify the way your "hasher" works, 
    # but I wouldn't play with that as it's native django's auth' hasher.

    def hash(self, key: str) -> str:
        #your hashing algorithm
        return 'your_hashed_key'

    def verify(self, key: str, hashed_key: str) -> bool:
        #checking given key
        return bool()

Затем в своем коде используйте CustomKeyGenerator вместо KeyGenerator

Важное примечание: Вместо переопределения функций hash и verify, я бы порекомендовал вам настроить собственные требуемые PASSWORD_HASHERS

...