我有一个带有节点js和静态Angular Files的应用程序。我需要nodejs来检查带有授权令牌的请求标头。为此,我有一个模块,用于检查令牌是否有效,如果是这种情况,则用户可以访问以下所有get-method。 可以与app.use(检查令牌的模块)一起使用。
但是我还需要用户的电子邮件地址,该地址写在已解码的令牌中。此电子邮件地址必须在Angular应用中可以访问。为此,我植入了get方法,Angular Application可以调用该方法并将其发送回电子邮件。
我的问题是,如何以安全的方式获取电子邮件地址。现在,我已经编辑了模块并添加了另一个功能。模块的伪代码:
各种电子邮件=“”; Module.exports = verfiyToken(req,rsp,next){
//这是存在的,否则index.js的以下get-method永远不会被调用。 如果(存在下一个),则调用next()
返回不重要,因为从未达到; }
现在同一模块中的其他功能 Module.exports = getEmail(){
//Email has the right value if the function verifyToken was successful once. That is always the case, because if not, then getEmail can never be called.
Return email;
}
这对我有用,但是我认为模块是Singleton。如果用户A成功拨打电话并且在网站中,我会看到问题。下一步,用户B成功拨打该网站,并获得一个经过验证的令牌。现在,变量“ email”具有用户B的电子邮件地址。如果用户A现在在Angular中调用该电子邮件调用的组件,那么他将获得用户B的电子邮件。
您了解我的问题吗?如何获得模块为每个会话创建实例?
对不起,英语。如有任何疑问,我会回答。
最好的问候
答案 0 :(得分:0)
关闭是您的朋友在这里。
听起来您想做这样的事情。考虑sample-module.js
,它导出返回一个函数的函数:
// Anything declared here is static and visible across all modules
const moduleGlobalStatic = 'this value is shared by all.';
exports = module.exports = function( a, b, c ) {
// stuff declare here is invocation-specific
let invocationSpecificStatic = `this is unique to each invocation - a:${a}, b:${b}, c:${c}`;
function doSomething( x , y , z ) {
// do something with a, b, c, x, y, and z
}
return doSomething;
}
用法很简单:
const doSomething1 = require('sample-module')(1,2,3); const doSomething2 = require('sample-module')('alpha','bravo','charlie');
doSomething()
已关闭在上述不同范围内可见的变量。
doSomething1
和doSomething2
共享moduleGlobalStatic
。
doSomething2
和doSomething2
分别获得a
,b
和c
以及invocationSpecificStatic
的值
每次调用doSomething1
或doSomething2
时,他们都会得到自己的x
,y
和z
的副本。但是,它们的a
,b
,c
和invocationSpecificStatic
变量在每次调用时都是不变的(除非它们在执行过程中对其进行了修改)。