簡體   English   中英

在 localhost 中登錄,但在 Heroku 中部署時出現“會話所需的秘密選項”錯誤

[英]Login working in localhost but error “secret option required for sessions” when deployed in Heroku

我的身份驗證在 localhost 上正常工作,但在 Heroku 上部署時出現錯誤 500。

錯誤:

{"type":"error","error":{"message":"secret option required for sessions"}}

我在 a.env 文件上有我的秘密 session,在推送時被 .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

我在將代碼部署到 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。

您是否已將您的秘密 session 從 your.env 文件添加到 heroku 配置? 由於 your.env 在 your.gitignore 中,它不會被推送到 heroku。 您的代碼正在從您的 process.env 中尋找一個字符串,但 heroku 環境還沒有它。

你有兩個解決方案

  1. Go 到您的應用程序控制台並單擊設置。 一旦你在那里,點擊顯示配置變量的框並在那里添加你的秘密。

或者

  1. 在項目的根目錄中,您可以使用以下命令在此處設置配置變量
heroku config:set SECRET_SESSION="secretName"

我最近在我的應用程序中遇到了這個問題。 僅當部署到 Heroku 時,我才收到“錯誤:會話所需的秘密選項”。

這是我的代碼最初的樣子:

app.use(session({
  secret: process.env.SESSION_SECRET, 
  resave: false, 
  saveUninitialized: false
}))

當我部署到 Heroku 時,它一直給我一個“內部服務器錯誤”。 檢查日志后,它向我顯示“錯誤:會話所需的秘密選項”。

這是我修復它的方法:

app.use(session({
  secret: 'secretidhere', 
  resave: false, 
  saveUninitialized: false
}))

由於 my.env 文件不可見,而這正是我擁有密碼的地方,所以它給了我這個錯誤。 現在,只需將任意字符串“secretidhere”,我再次部署到 heroku 並且它起作用了!

** 但是,請注意,這不應該是永久的解決方案。 正如上面的海報所說,你應該在你的根目錄中有一個配置文件,或者其他方法,這樣這個 session 就會保密。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM