2017-06-30 5 views
0

Expressバックエンドでclient-sessionsモジュールを使用します。何らかの理由で、それはリクエストごとに空だ、ExpressJSクライアントセッションはセッションを保存しません

var sessions  = require('client-sessions'); 
app.use(sessions({ 
    cookieName: Constants.CLIENT_SESSION_NAME, // pi_client_session 
    secret: Constants.CLIENT_SESSION_SECRET, // some long string here 
    duration: Constants.CLIENT_SESSION_LIFETIME // 24 * 60 * 60 * 1000; 
})); 

しかし:だから私は、モジュールをインストールして、このようにExpressで動作するように設定しました。ここでは例です:

CLIENT SESSION BEFORE: {} 
CLIENT SESSION AFTER: {"test":"saved"} 

私はGoogleのクロム、オペラ座から試してみた:

router.get('/auth', function(req, res, next) { 
    console.log("CLIENT SESSION BEFORE: " + JSON.stringify(req[Constants.CLIENT_SESSION_NAME])); 
    req[Constants.CLIENT_SESSION_NAME].test = "saved"; 
    console.log("CLIENT SESSION AFTER: " + JSON.stringify(req[Constants.CLIENT_SESSION_NAME])); 
    return res.json({ sessionSaved: true}); 
} 

そして、ここでは、私は毎回得る出力されます。同じ結果です。

私の設定は次のようなものです:ReactJS app proxy from localhost:3000 to localhost:3001これは私の明白なバックエンドです。 私は郵便配達員と表現する直接のリクエストを試みましたが、それはセッションを正常に保存しました。だから問題は明らかに表現して戻って反応するプロキシである。次のように の反応側のマイpackage.jsonファイルが(私は依存関係が含まれていませんでした)です:

"scripts": { 
    "build-css": "node-sass-chokidar src/ -o src/", 
    "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive", 
    "start-js": "react-scripts start", 
    "start": "npm-run-all -p watch-css start-js", 
    "build": "npm run build-css && react-scripts build", 
    "eject": "react-scripts eject" 
    }, 
    "proxy": "http://localhost:3001" 

そこで問題は、私はこのようなプロキシを使用してクライアント・セッションを取得する方法、ありますか?

+1

あなたは確かクライアント側の要求ということです資格情報を正しく渡していますか? a)クライアントがセッションCookieを受信し、b)クライアントがその後の要求でそのCookieを送信するかどうかを確認する必要があります。また、ここを見てください:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials – robertklep

+0

私はXMLHttpRequestではなくfetch()を使用しています。しかし、私はキーワードの資格情報を指してくれてありがとう:)。私はフェッチでそれをチェックしようとします – Konstantin

+1

同じことが少しだけ違って適用されます:https://developer.mozilla.org/en/US/docs/Web/API/Fetch_API/Using_Fetch#Sending_a_request_with_credentials_included – robertklep

答えて

1

あなたは、アプリがバックエンドとは異なる起源で実行されて反応するので、あなたが明示的に要求ごとに(クッキーのような)の資格情報を渡すためにfetchを指示する必要があります:

fetch('http://your-backend', { 
    credentials: 'include' 
}).then(...) 
関連する問題