私は、jsonwebtokenでnodejsにREST APIを作成しています。問題は、トークンをデコードしてreq.sessionを設定するミドルウェアのオブジェクトプロパティとしてデコードされたトークンの値として、しかし私はrouter.post()メソッドのreq.sessionにしかアクセスできませんが、ミドルウェア機能で設定されたそのセッションデータプロパティにアクセスすることはできません。以下はルートミドルウェアに設定されたセッション変数は、ノードj +同時実行の問題ではアプリケーション全体からアクセスできません
私のサンプルコードでは、私が月を考えてREQオブジェクトは、すべてのアプリケーション上でavaliableされていないので、私はSessionDataにプロパティを作成し
user.jsの
var router=require('express').Router();
var AuthenticateLib=require('app/libraries/authentication');
router.post('/updateprofile',AuthenticateLib.verifyToken,function(req,res){
console.log(req.session); // is accessible over here
console.log(AuthenticateLib.sessiondata) // prints null
});
authentication.js
module.exports={
sessiondata:null,
verifyToken:function(req,res,next){
var token = req.headers.authorization;
return jwt.verifyAsync(token,config.getParam('security.jwtSecret'))
.then(decoded => {
req.session=decoded;
this.sessiondata=decoded;
next();
})
.catch(...)
}}
ですセッションにアクセスする必要がある場合はいつでも、AuthenticateLibとセッションデータのプロパティをファイルに要求することができますか。
私のセッションデータは、router.postだけでなく、アプリケーション内の他のファイルにもアクセスできる必要があります。
AuthenticateLib.sessiondata = req.sessionを追加しようとしました。 router.post行の直後にはすべて正常に動作しますが、それは唯一の方法です。ミドルウェアで設定されたsessiondataプロパティが機能しないのはなぜですか? また、sessiondataプロパティに関連する同時性の問題を解決する方法もあります。
ご協力いただければ幸いです。私は
authentication.js
function fname()
{
var x,y,mysessiondata; // all private vars
return {
setsessiondata:function(data){mysessiondata=data;}, // public methods and vars
foo:function(){},.....
}
}
module.exports=fname;
技術のような何かをした同時実行の問題を解決するために
「AuthenticateLib.sessiondata」は、私が見ることのできるすべてのリクエストで共有されます。つまり、サイトで複数の同時ユーザをサポートすることはできません。 – robertklep
AuthenticateLib.sessiondataの寿命は、そのユーザーのその要求に対してのみです。複数の同時ユーザーがログインしている場合は、ユーザーごとにAuthenticateLib.sessiondataの複数のコピーが存在します。私が間違っている場合は私に連絡してください。 – Vibhas
あなたは間違っています:) AuthenticateLib .sessiondata'はリクエストごとに同じプロパティなので、どのリクエストが行われたかにかかわらず、 'verifyToken'を呼び出すリクエストごとに上書きされます。 – robertklep