[英]my node app is working fine on localhost but when i deployed on heroku , it is giving me application error. you can read description below
[英]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 環境還沒有它。
你有兩個解決方案
或者
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.