が唯一の問題の一部を解決します。
外観からは、express-session
とconnect-mongo
を使用してセッションを管理しています。これは、データベース内のJSON 文字列として(req.session
)セッションデータを格納します:
{
"_id": "fLBj_McMFM-7PwVNsv9ov88vOAgoNiDa",
"session": "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"userId\":\"my-user-id\"}",
"expires": ISODate("2016-07-09T08:47:38.156Z")
}
あなたが見ることができるように、session
が文字列ではなくオブジェクトであるので、あなたはsession.userId
を使用して、それを直接照会することはできません。 。
あなたがreq.session.destroy()
を使用できない場合は、JSON文字列にユーザーIDと照合する正規表現のクエリを実行する必要があります。
let collection = mongoose.connection.db.collection('sessions');
let query = new RegExp(`"userId":"${userId}"`);
collection.remove({ session : query }, function(e, found) {
console.log(found);
res.json({success: true});
});
userId
がescape-string-regexp
のようなものを通じて最初の実行であればそれはおそらく最善です特殊文字が正しくエスケープされていることを確認してください。
特に、データベースに多数のセッションがある場合、これは高速なクエリではありません。
EDIT:私はちょうど、false
に設定されている場合、MongoDBのに通常のオブジェクトとしてではなく、JSON文字列としてセッションデータを書き込む必要がありconnect-mongo
ためstringify
オプションを発見しました。
可能な複製http://stackoverflow.com/a/10519504/3284355正解の編集を参照してください。既にインストールされているので、mongoネイティブドライバパッケージを使用することができます – Molda