我在Heroku上部署了一个使用Play Framework开发的Web应用程序。 部署无法返回此错误:
[error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
这意味着"我们处于刺激模式"?我在哪里设置模式?我必须改变它,因为它不是生产环境。
由于
答案 0 :(得分:3)
将它放入conf / application.conf
play.crypto.secret="changethissosomethingsecret"
You can also start your application with a source with a secret key as a parameter.
答案 1 :(得分:1)
您需要根据应用程序使用的Play版本设置不同的键。
要么查看项目plugins.sbt
中的com.typesafe.play:sbt-plugin版本,要么,如果命令行上有find
和GNU grep
,请执行以下命令:
find . -name "plugins.sbt" -exec ggrep -PHin --color=always 'com.typesafe.play.*sbt-plugin.*%\s*"\K.*?(?=")' {} \;
在知道应用程序使用的播放版本号后,继续下一步。
Play 2.3.x:application.secret
(默认为changeme
)
Play 2.4.x:play.crypto.secret
(默认为changeme
)
Play 2.5.x:play.crypto.secret
(默认为changeme
)
Play 2.6.x:play.http.secret.key
(默认为changeme
)
您可以看到它不一致,但是一致是:
APPLICATION_SECRET
环境变量/属性(因此,类似APPLICAITION_SECRET="changed" sbt "runProd 9001"
这样的东西)来覆盖此机密changeme
接下来的两件事已在Play v2.6.x
上进行了测试,但根据相应的文档,它们应与v2.4.x
和v2.5.x
的相同命令一起使用。
唯一的例外是v2.3.x
,它分别使用play-generate-secret
和play-update-secret
从播放应用程序的目录中运行以下命令(已通过sbt v1.1.6和play v2.6.x测试):
$ sbt playGenerateSecret | grep -i 'generated'
[info] Generated new secret: ^7UubY[rFXzkN:v6TB9WL/lfGsP61/vzAHA9tdZNZ@nALH=TEztKAlTC>xz;VUXw
您可以手动复制以上内容作为相应键的值(基于前面所述的播放框架版本),或者,可以使用以下建议。
application.conf
中的现有密钥?与上述相同,从您的Play框架应用的根目录中运行以下命令:
$ sbt playUpdateSecret | grep -i "secret"
[info] Generated new secret: Kz?fHm_I[wt^Onp[@cr<:`ttrQi]KMsdDs>22hEF?RhkoanQ7gA6NAjL33EV2^Xt
[info] Updating application secret in /Users/blah/someplayapp/conf/application.conf
[warn] Did not find application secret in /Users/blah/someplayapp/conf/application.conf
[warn] Adding application secret to start of file
关于此命令的注意事项:
playUpdateSecret
将更新现有机密,或将不存在的机密添加到application.conf
。此命令仅在application.conf
中查找密钥和/或添加/更新密钥。如果您遵循Best Practice,这一点很重要。
最佳实践是指创建一个单独的production.conf
来覆盖application.conf中的该键:
包括“应用程序”
play.http.secret.key =“ somesecretkey”
然后像这样运行您的应用程序:
/path/to/yourapp/bin/yourapp -Dconfig.file=/path/to/production.conf
如您所见,如果您正在使用playUpdateSecret
来生成一个新机密,则它将无效,因为它已被production.conf
中指定的机密所覆盖。
答案 2 :(得分:0)
答案 3 :(得分:0)
您需要在conf文件中添加应用程序密钥。
play.http.secret.key =“ changethissosomethingsecret”