我正在设置一个新的应用程序,并在使用一些样板代码来管理会话和加密密码。我只是不知道有一个特定的功能。
我已经尝试遵循代码,但是仍然无法确定发生了什么。
const serverSessionSecret = () => {
if (!process.env.SERVER_SESSION_SECRET ||
process.env.SERVER_SESSION_SECRET.length < 8 ||
process.env.SERVER_SESSION_SECRET === warnings.exampleBadSecret) {
// Warning if user doesn't have a good secret
console.log(warnings.badSecret);
}
return process.env.SERVER_SESSION_SECRET;
};
module.exports = cookieSession({
secret: serverSessionSecret() || 'secret', // please set this in your .env file
key: 'user', // this is the name of the req.variable. 'user' is convention, but not required
resave: 'false',
saveUninitialized: false,
cookie: { maxage: 60000, secure: false },
});
该函数引用了一个我尚未创建的.env
文件。这解释了为什么我总是得到“错误的秘密” console.log
。看来serverSessionSecret
函数只是在测试process.env.SERVER_SESSION_SECRET
是否满足最低安全要求,但这是什么目的。
如果我没有.env
,有什么区别?
答案 0 :(得分:0)
process.env
是一种在脚本执行时访问环境变量的方法。
这允许您根据运行的位置将不同的变量注入代码中。环境变量可以导出到运行代码的位置(例如,export newEnv = NewEnvVar
),也可以存在于.env
文件中。
查看每一行的注释:
const serverSessionSecret = () => {
if (!process.env.SERVER_SESSION_SECRET ||
// Send warning if SERVER_SESSION_SECRET does NOT exit? Or...
process.env.SERVER_SESSION_SECRET.length < 8 ||
// Send warning if it less than 8 characters. Or...
process.env.SERVER_SESSION_SECRET === warnings.exampleBadSecret
// Send warning if the secret matches a predefined bad example
) {
// Warning if user doesn't have a good secret
console.log(warnings.badSecret);
}
/* If none of the above conditions are met,
* a console.log warning message does not get sent.
*/
return process.env.SERVER_SESSION_SECRET;
// This returns the Secret or Undefined if it does not exist.
};
然后在您的出口中
module.exports = cookieSession({
secret: serverSessionSecret() || 'secret', // please set this in your .env file
// secret will equal your 'process.env.SERVER_SESSION_SECRET' environment
// variable, but if it is not defined, it will equal 'secret'
key: 'user', // this is the name of the req.variable. 'user' is convention, but not required
resave: 'false',
saveUninitialized: false,
cookie: { maxage: 60000, secure: false },
});
总而言之,在这种情况下,serverSessionSecret()
仅返回一个字符串。 secret
或您的环境变量中设置的内容。
您似乎正在使用此库:https://www.npmjs.com/package/cookie-session
在这种情况下,当您使用secret
配置cookie会话时,其文档将显示:
秘密
如果没有提供键,将用作单个键的字符串。
键
用于签名和验证Cookie值的键列表。设置的Cookie始终使用键[0]签名,而其他键对验证有效,允许旋转键。
在您的情况下,使用process.env.SERVER_SESSION_SECRET
或secret
对Cookie进行签名和验证。