問題タブ [express-session]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - CORS 呼び出し後に Express Session が保持されない
TL;DR:
Express、Express-Session、および Express-Cors を使用して、バックボーン アプリと Node.js サーバー間で実行される複数の API 呼び出しにわたるセッションの永続化を成功させることができません。呼び出しのたびにセッションが再初期化/失われたようです。
長いバージョン:
localhost:3000
で実行されている Node.js サーバーで次の呼び出しを実行するクライアント Backbone/React/Flux アプリケーションを実行していlocalhost:4242
ます。
HTTP 呼び出し
基本的に、最初の呼び出しPOST /api/session
はユーザーのログインであり、API トークンをセッションに保存しようとします。2 番目の呼び出しGET /api/users
は、最初の呼び出しが成功した直後にトリガーされ、ユーザー情報を取得します。
バックボーン方式
ログイン用のセッションモデルのバックボーンメソッドは次のとおりです。
そして、UserStore の /api/users への呼び出し
これらのさまざまなオプションを使用します (Backbone.Collection/Backbone.Model で Backbone.sync をオーバーライドしました):
(簡略化されたバージョン: BaseCollection と BaseModel を使用して、sync() メソッドをオーバーライドしているモデルとコレクションの両方で同じこと)。
そのため、Console.log(options)
inBackbone.sync(method, model, options)
が返されます:
Node.js のセットアップとメソッド
これが私の Node.js ルーター設定 Express です:
これが私のNode.jsメソッドの処理ですPOST /api/session
そしてお取り扱いの方GET /api/users
Node.js ログ
ログは次のとおりです。
CORS リクエストが正常に実行されていることがわかるように、トークンを適切に取得し、それをセッション内に保存しようとしています。
ただし、2 番目の呼び出しではセッションが永続化されず、最初の呼び出しで実際に設定している変数 (accessToken) にアクセスできません。
ログと 2 つの呼び出しの HTTP ヘッダーを見ると、セッション ID が変更され、各要求が行われるため、毎回セッションが再初期化されているように見えます。私が理解している限りではそうです)。
この動作は、CORS レベルでの構成の一貫性がないか、欠落していることが原因であるか、またはpath
セッション ( Express.use(path, middleware)
、およびCookie({path: '/'})
) のセットが原因であると思われます。ただし、さまざまな構成、セットアップ、およびヘッダーを何度も試みたにもかかわらず、実際には機能しません。
この振る舞いと私が欠けているものについて私を啓発できる人は誰でも大歓迎です:)
ありがとう!
PS: CoffeeScript を使用していない開発者には申し訳ありません ;)
node.js - http.request 内のセッション変数を Express で処理する
やあ。UI で req.session.mySessValue を出力すると、値が空になります。req.session.mySessValue = dt.myValue; の割り当てだと思います。(express-session) は適切ではありません。誰でもこれについて私を助けることができます。前もって感謝します。私のエクスプレスコードは
node.js - エクスプレスセッションがnodejsを保存しない
この単純な例は機能しません。リクエストごとにセッションが再度作成されますが、解決方法がわかりません。
リクエストの数を保存しようとしましたが、リクエストを行うたびにセッションが作成されます。
node.js - セッション Cookie が安全な場合、CSURF が機能しない
Cookie をセキュアに設定すると、ノードの csrf が機能しないことに困惑しています。
このセットアップでは、セッション データの保存に MongoDB を使用しています。ドキュメントを読んでexpress-session
、私はこれに出くわしました...
secure: true が推奨されるオプションであることに注意してください。ただし、https 対応の Web サイトが必要です。つまり、安全な Cookie には HTTPS が必要です。セキュアが設定されている場合、HTTP 経由でサイトにアクセスすると、Cookie は設定されません。プロキシの背後に node.js があり、secure: true を使用している場合は、express で "trust proxy" を設定する必要があります。
ソース: npm エクスプレス セッション
現在、サイトをローカルで実行しているため、HTTPS ではありません。secure:true
csrfテストに合格しないこととどのように関係があるのか 知りたいですか?
javascript - Cookie の詳細を理解する JavaScript
フロントエンドの反応アプリケーションで、セッション Cookie が存在するかどうかを確認しようとしています。これは、ログイン ページを表示するか (セッション Cookie が存在しないか無効になっている場合)、またはコンテンツ ページを表示するかを決定するのに役立ちます。
バックエンドの高速セッション ミドルウェアは、「connect.sid」という名前の Cookie を設定します。この Cookie の存在を js-cookie で照会すると、undefinedと表示されます。しかし、私はこのクッキーが存在することを知っています。また、ブラウザー コンソールからプログラムで別の Cookie を作成しました。ブラウザのコンソール ウィンドウからプログラムで設定した Cookie を正常に照会できますが、最初の Cookie を見つけることができません。
使用可能な Cookie を示すスクリーンショットを次に示します。
そして、これがブラウザコンソールからの両方の Cookie に対する私のテストです。
「connect.sid」のクエリが失敗する理由がわかりません。ここで間違っているところを誰かが助けてくれますか...
session - エクスプレスセッションはセッションを保存しませんでした
ここでは、express-session を使用してユーザー セッションを保存しましたが、req.session.user が常に未定義であることがわかりました。
面白いことに、chrome プラグインの postman を使用してアクセスしたところ、問題はありませんでした。
それで、それを修正する方法は?
node.js - Express 4 および Redis ストア、express-session で未定義の Req.session
Express 4 でのセッションに redis ストアを使用する方法を理解できないようです。いくつかのサンプル コードは次のようになります。
ご覧のとおり、上記の req.session は常に未定義のようであり、明らかにそこに変数を格納することはできません...