Где я могу получить 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
Другие вопросы по тегам