我的身份验证可以在localhost上正常工作,但是在Heroku上部署时会出现错误500。
错误:
{"type":"error","error":{"message":"secret option required for sessions"}}
我在.env文件上进行了秘密会话,推送时它会被.gitignore忽略(也许我应该更改它?)
Heroku日志:
2019-10-23T17:22:22.682593+00:00 heroku[router]: at=info method=GET path="/manifest.json" host=apppack-demo.herokuapp.com request_id=bb235945-cb82-4168-91ce-fd19d2109801 fwd="85.240.87.39" dyno=web.1 connect=0ms service=2ms status=304 bytes=237 protocol=https
2019-10-23T17:22:22.793594+00:00 heroku[router]: at=info method=GET path="/logo192.png" host=apppack-demo.herokuapp.com request_id=8a1d2243-45c9-4919-b2ad-3ee8f9148d9c fwd="85.240.87.39" dyno=web.1 connect=0ms service=2ms status=304 bytes=238 protocol=https
2019-10-23T17:22:35.594349+00:00 heroku[router]: at=info method=POST path="/api/signup" host=apppack-demo.herokuapp.com request_id=43907374-4de3-4658-92ce-9188f03e1624 fwd="85.240.87.39" dyno=web.1 connect=0ms service=3ms status=500 bytes=300 protocol=https
2019-10-23T17:22:35.592607+00:00 app[web.1]: POST /api/signup 500 1.206 ms - 74
答案 0 :(得分:1)
我在将代码部署到 AWS Elastic BeanStalk 时遇到了同样的问题。 在 .env 中,我们可以 -
secret='my_secret'
在 server.js 中:
app.use(cookieParser())
app.use(session({
resave:true,
saveUninitialized:true,
secret:process.env.secret,
cookie:{maxAge:3600000*24}
}))
结果证明解决方案是为那里的环境添加秘密。只需将其添加到您的生产环境中即可,无论是 heroku 还是 AWS。
答案 1 :(得分:0)
您是否已将秘密会话从.env文件添加到heroku配置中?由于您的.env位于.gitignore中,因此不会将其推送到heroku。您的代码正在从process.env中寻找一个字符串,但是heroku环境还没有它。
您有两种解决方案
或
heroku config:set SECRET_SESSION="secretName"
答案 2 :(得分:0)
我最近在我的应用中遇到了这个问题。 仅当部署到Heroku时,我才收到“错误:会话所需的秘密选项”。
这是我的代码本来的样子:
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}))
当我部署到Heroku时,它一直提示我“内部服务器错误”。检查日志后,它显示了“错误:会话需要秘密选项”。
这是我的固定方法:
app.use(session({
secret: 'secretidhere',
resave: false,
saveUninitialized: false
}))
由于无法查看我的.env文件,而那是我拥有密码的地方,因此出现了该错误。现在,只需将任意字符串“ secretidhere”放入,我便再次部署到heroku并成功了!
**但是,请注意,这不应是永久解决方案。如上面的张贴者所述,您应该在根目录中或其他方法中有一个配置文件,以便此会话保持秘密。
希望这会有所帮助!