【发布时间】:2022-11-09 01:51:16
【问题描述】:
通常secret 在使用express-session 的节点应用程序中是硬编码的,例如 -
const session = require("express-session")
let RedisStore = require("connect-redis")(session)
const { createClient } = require("redis")
let redisClient = createClient({ legacyMode: true })
redisClient.connect().catch(console.error)
app.use(
session({
store: new RedisStore({ client: redisClient }),
saveUninitialized: false,
secret: "keyboard cat",
resave: false,
})
)
显然我可以通过编辑源代码和restarting 节点脚本来更改这个秘密keyboard cat。可以在应用程序仍在运行时更改它吗?
【问题讨论】:
-
您尝试更改秘密的频率如何?您更改秘密的动机是什么?另外,您通常多久重新启动一次服务器以进行维护或清理内存并重新开始?
-
@jfriend00 我的动机是我将大部分代码放在 github 上,我不喜欢硬编码任何密码或秘密。我创建了一个 HTML 表单以允许管理员
POST秘密,但我认为这种方法失败了,因为包括会话的中间件已经加载但服务器接收秘密的时间(通过路由器app.post('/login', (req, res) => { ...) -
通常,您将某些未检入 github 的配置/部署文件的秘密部分。这与您放置服务器所需的数据库密码和其他凭据的配置文件类型相同。这样,当您的服务器启动时,它会从未存储在 github 中的本地配置文件中获取所需的凭据/秘密。
-
@jfriend00 这是我的第一种方法,但我的 Heroku 开发服务器的文件系统是 ephemeral,所以我的配置文件经常丢失。
-
既然您提到了 Heroku,请参阅我在下面的答案末尾添加的内容。
标签: node.js express express-session