登录在localhost中工作,但在Heroku中部署时出现错误“会话需要秘密选项”

时间:2019-10-23 17:24:34

标签: node.js reactjs express heroku

我的身份验证可以在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

3 个答案:

答案 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环境还没有它。

您有两种解决方案

  1. 转到您的应用程序控制台,然后单击设置。到达那里后,单击显示“揭示配置变量”的框,然后在其中添加您的秘密。

  1. 在项目的根目录中,可以使用命令
  2. 在此处设置配置变量。
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并成功了!

**但是,请注意,这不应是永久解决方案。如上面的张贴者所述,您应该在根目录中或其他方法中有一个配置文件,以便此会话保持秘密。

希望这会有所帮助!