Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django密钥生成_Django_Django Rest Framework - Fatal编程技术网

Django密钥生成

Django密钥生成,django,django-rest-framework,Django,Django Rest Framework,我正在为Django后端制作一个锅炉板,我需要能够让下载它的下一个人显然无法访问我的secrot密钥,或者使用不同的密钥。我一直在研究一些选择,并在这个过程中进行了实验。我尝试了以下方法: from django.core.management.utils import get_random_secret_key SECRET_KEY = get_random_secret_key() 这似乎是可行的。我假设每次运行python manage.py runserver时它都会生成一个新的密钥

我正在为Django后端制作一个锅炉板,我需要能够让下载它的下一个人显然无法访问我的secrot密钥,或者使用不同的密钥。我一直在研究一些选择,并在这个过程中进行了实验。我尝试了以下方法:

from django.core.management.utils import get_random_secret_key 
SECRET_KEY = get_random_secret_key()

这似乎是可行的。我假设每次运行python manage.py runserver时它都会生成一个新的密钥。对于生产环境来说,这会是一个问题吗?这真的是为了heroku部署,有没有更好的方法可以通过公共回购实现这一点?我想我现在所做的是要破坏一些东西。

你猜对了,秘密密钥不应该在每次运行时都更改。其他人应手动创建自己的回购协议,然后提交回购协议。另一种方法是从环境变量加载它,并让它们将密钥放在那里

关于第二个问题-您需要这样做的唯一原因是要折衷密钥。根据文件:

密钥用于:

如果正在使用django.contrib.sessions.backends.cache以外的任何其他会话后端,或者正在使用默认的get\u session\u auth\u hash(),则为所有会话

如果使用CookieStorage或FallbackStorage,则显示所有消息

所有PasswordResetView令牌

加密签名的任何用法,除非提供了不同的密钥


因此,更改它可能会注销所有用户并使密码/重置链接无效。这不是你想经常做的事情,但也不是一场彻底的灾难

您的猜测是正确的,秘密密钥不应在每次运行时更改。其他人应手动创建自己的回购协议,然后提交回购协议。另一种方法是从环境变量中加载它,让它们把它们的键放在那里。是的,我正在考虑手动操作。你能把这个放在一个我可以标记为已回答的情况下吗?另外,快速提问,如果您需要在创建和部署密钥后的某个时间更改密钥,该怎么办?只想补充一点:您最好不要将密钥添加到您的回购协议中。它应该通过环境变量来处理——或者至少,保持未提交到您的repo,并且只存在于您的生产环境中。当人们试图访问您可能不希望他们访问的部分数据时,该键可以帮助他们。最好对它保密(顾名思义)。如果你确实计划更改你的密钥,一定要先注销你的网站。如果您不这样做,当您在更改密钥后返回站点时,您将得到一个“不正确的填充”错误或类似的错误。