Где я могу получить SECRET_KEY для Flask?
Я пытаюсь настроить Flask-Debugtoolbar, но я получаю сообщение "DebugToolBar требуется SECRET_KEY". Где взять секретный ключ?
8 ответов
Секретный ключ необходим для обеспечения безопасности сеансов на стороне клиента. Вы можете сгенерировать случайный ключ
>>> import os
>>> os.urandom(24)
'\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
Просто возьмите этот ключ и скопируйте / вставьте его в файл конфигурации
SECRET_KEY = '\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
Смотрите документацию сессий
Получить случайную строку для секретного ключа:
Способ 1: использование os
в Python 2/3:
>>> import os
>>> os.urandom(12)
'\xf0?a\x9a\\\xff\xd4;\x0c\xcbHi'
Способ 2: использование uuid
в Python 2/3:
>>> import uuid
>>> uuid.uuid4().hex
'3d6f45a5fc12445dbac2f59c3b6c7cb1'
Способ 3: использование secrets
в Python >= 3.6:
>>> import secrets
>>> secrets.token_urlsafe(16)
'Drmhze6EPcv0fN_81Bj-nA'
Способ 4: использование os
в Python 3:
>>> import os
>>> os.urandom(12).hex()
'f3cfe9ed8fae309f02079dbf'
Установить секретный ключ в колбу
Способ 1: использование app.secret_key
:
app.secret_key = 'the random string'
Способ 2: использование app.config
:
app.config['SECRET_KEY'] = 'the random string'
Способ 3: поместите его в свой конфигурационный файл:
SECRET_KEY = 'the random string'
Для того, чтобы использовать сеанс в колбе, вам необходимо установить секретный ключ в настройках вашего приложения. Секретный ключ - это случайный ключ, используемый для шифрования ваших файлов cookie и сохранения их отправки в браузер.
Эта ошибка из-за этой строки в коде Flask-Debugtoolbar
Чтобы это исправить, вам просто нужно установить SECRET_KEY
в вашем конфигурационном файле.
app.config['SECRET_KEY'] = "Your_secret_string"
или, если у вас есть файл конфигурации, просто добавьте ниже конфигурацию к нему:
SECRET_KEY = "Your_secret_string"
Откройте Python, запустите в себе
import secrets
secret_key = secrets.token_hex(16)
# example output, secret_key = 000d88cd9d90036ebdd237eb6b0db000
app.config['SECRET_KEY'] = secret_key
Вот способ сохранить secret_key Flask в скрытом файле вместо кода:
import secrets
from pathlib import Path
from flask import Flask
app = Flask(__name__)
SECRET_FILE_PATH = Path(".flask_secret")
try:
with SECRET_FILE_PATH.open("r") as secret_file:
app.secret_key = secret_file.read()
except FileNotFoundError:
# Let's create a cryptographically secure code in that file
with SECRET_FILE_PATH.open("w") as secret_file:
app.secret_key = secrets.token_hex(32)
secret_file.write(app.secret_key)
Всегда полезно хранить секреты отдельно от версионного кода. Git очень хорошо справляется с потерей данных. Это включает в себя секретные ключи и пароли :)
Согласно документации Flask , вы можете использовать следующую команду для генерации значенияSECRET_KEY
:
python -c 'import secrets; print(secrets.token_hex())'
Важно иметь в виду следующее:
Не раскрывайте секретный ключ при публикации вопросов или фиксации кода.
откройте оболочку и вставьте:
python3 -c 'import os; print(os.urandom(32))'
скопируйте результат, затем:
app.config["SECRET_KEY"]="copied value"
Я рекомендую хешировать его с помощью хэша bcrypt и использовать шестнадцатеричный код.
# IMPORT
from flask_bcrypt import Bcrypt
import secrets
secret_key = secrets.token_hex(16) #Create HEX Key
bcrypt = Bcrypt(app) #Init Bcrypt
secret_key_hash = bcrypt.generate_password_hash(secret_key) #hash the HEX key with Bcrypt
app.config['SECRET_KEY'] = secret_key_hash #setup secret key
# Output like: $2b$12$Y0QMIGwksa5OhtOBF9BczuAJ0hYMUv7esEBgMMdAuJ4V.7stwxT9e