【发布时间】:2018-12-18 17:24:13
【问题描述】:
我正在尝试为我的后端实现一个服务,该服务允许从代码中的任何位置调用会话数据,这意味着我想创建一个服务文件,该文件从获取会话数据的函数中导出值。否则我只能从具有 req: Request 和 res: Response 参数的内部函数中获取会话数据。所以我基本上是在尝试将值锁定到一个可以在我的项目中的任何地方使用和调用的变量。我的代码现在看起来像这样,但如果我在文件中的其他任何地方使用导出,它只会打印实际代码(函数)sn-p,而不是代码中指定的返回值。一般来说,我对 typescript 和 node 很陌生,这意味着我可能会在这里犯一些非常愚蠢的错误。
提前感谢所有帮助! /维克多
import { Request, Response, NextFunction } from "express";
function getUserSessionData(req: Request, res: Response) {
const userData = res.status(200).send(req.session.userData);
return userData;
}
function getUserSessionLang(req: Request, res: Response) {
const userLang = res.status(200).send(req.session.language);
return userLang;
}
function getUserSessionAll(req: Request, res: Response) {
const userAll = res.status(200).send(req.session);
return userAll;
}
module.exports = {
userData: getUserSessionData,
userLang: getUserSessionLang,
userAll: getUserSessionAll
};
我希望它如何工作:
const sessionService = require("./services/sessionService");
function getStuff(req: Request, res: Response, next: NextFunction) {
let redisKey;
if (!req.session.language) {
redisKey = "getStuffEN";
}
else {
redisKey = "getStuff" + sessionService.userLang;
}
console.log(redisKey);
getRedis(redisKey, function success(reply: any) {
res.status(200).json(
JSON.parse(reply)
);
}, function error(err: Error) {
console.log("Something went wrong");
});
}
这就是现在(和工作)的方式
function getStuff(req: Request, res: Response, next: NextFunction) {
let redisKey;
if (!req.session.language) {
redisKey = "getStuffEN";
}
else {
redisKey = "getStuff" + req.session.language;
}
console.log(redisKey);
getRedis(redisKey, function success(reply: any) {
res.status(200).json(
JSON.parse(reply)
);
}, function error(err: Error) {
console.log("Something went wrong");
});
}
我希望它像第一个示例一样工作,因为在我的代码中有一些实例,如果可能的话,我想在不必传递 req、res 参数的情况下访问数据。
【问题讨论】:
-
将数据写入数据库或文件
-
但数据是动态修改的,因为 cookie 仅存储会话持续时间或最多 1 天。将数据存储在其他任何地方感觉有点安全风险,因为这样用户数据存储在某个地方并且可能会受到外部威胁。
-
so clear data once session termantes
-
在安全方面感觉有点冒险 - 如果数据库有机会暴露,那就是有风险的。出于安全考虑,您是否要将所有敏感的用户数据存储在 RAM 中?
-
现在我实际上实现了一个 redisstore,以便将数据存储在某个地方,但是要访问数据我仍然必须使用 req.session 这意味着它需要在一个带有 req 的函数中:请求参数。我仍然很难找到绕过这个的方法。 redisstore 会为每个会话生成一个随机密钥,但是将密钥保存在某处然后使用 client.get redis 函数访问会话数据感觉有点过头了,因为我必须将随机生成的密钥保存在某处并匹配它会议,不是吗?
标签: node.js typescript global