Управление функциями helper/utils и их конфиденциальными данными в django
Я интегрирую API третьей стороны (скажем, для отправки OTP на мобильные телефоны), и я хочу, чтобы моя система была ГИБКОЙ но БЕЗОПАСНОЙ в то же время, рассмотрим:
- Lets suppose right now I am using a vendor named msg91.com for sending SMS/OTP to customers.
- But in future I might switch to some other vendor (say way2sms.com) for the same service owing to various reasons (say cost/testing/production).
У меня есть несколько вспомогательных функций для их интеграции, рассмотрим псевдокод:
if SMS_VENDOR == 'MSG91':
msg91_helper_function():
# do some processing specific to vendor
# authenticate with msg91
# send SMS/OTP
# ------------------------------------------------------------------
elif SMS_VENDOR == 'WAY2SMS':
way2sms_helper_function():
# do some processing specific to vendor
# authenticate with way2sms
# send SMS/OTP
Я знаю, что обычно люди имеют utils.py
или helpers.py
файл в одном приложении django (обычно с именем common).
но проблема заключается в следующем:
У каждого поставщика есть свои собственные конфиденциальные данные, такие как auth_token, которые я не могу хранить непосредственно в вспомогательных функциях (поскольку код будет общим).
Что я хочу: Как мне безопасно хранить эти
.auth_token
как чувствительные КОНСТАНТЫ при сохранении моей системы гибкой
Первый подход
Хранить их в файле .env
( затем добавить его в .gitignore
) и затем получать их как:
from decouple import config
msg91_auth_key = congif('MSG91_AUTH_KEY')
Это тот же способ, который мы используем для защиты SECRET_KEY
и других конфиденциальных данных settings.py
с помощью python decouple lib. docs
pip install python-decouple
Второе приближение
Хранение их в Базе Данных и получение их оттуда как:
Второй подход кажется мне более гибким, но менее безопасным и более сложным и медленным, есть множество вспомогательных функций для различных утилит, например:
- For SMS Vendor
- Fore URL Shortner Vendor
... etc
Есть ли другой лучший подход для управления такими многочисленными вспомогательными функциями и их конфиденциальными данными? ( желательно все в одном месте)