Mongo Store


まず、NoteではセッションdataがCookieに格納されていないことがわかります。


https://www.npmjs.com/package/express-session
Note Session data is not saved in the cookie itself, just the session ID. Session data is stored server-side.
貯蔵はsession ID万だそうです.session dataは、サーバ側に格納される.
ここにもう一つ知っておくべきことがあります.session idはCookieに格納されているが、データ自体は
サーバに格納されます.
Warning The default server-side session storage, MemoryStore, is purposely not designed for a production environment. It will leak memory under most conditions, does not scale past a single process, and is meant for debugging and developing.
サーバに格納されているdefault session storageMemoryStoreで、実際に使用するために存在するものではありません.
したがって、session storeを使用する必要があります.セッションはdatabaseに保存する必要があります. compatible session storesをクリックすると、多くのオプションが得られます.
https://www.npmjs.com/package/express-session#compatible-session-stores
セッションを保存するために使用できるdatabaseは複数あります.
そのうちmongoを見てみましょう.★ connect-mongo A MongoDB-based session store.クリック
https://www.npmjs.com/package/connect-mongo connect-mongoは、セッションをMongoDBに格納する.サーバが再起動すると
セッションはdatabaseに格納されており、誰かがログインしても忘れません.

まずconnect-mongoをインストールします。

vscの端末にnpm i connect-mongoが入力される.
そしてMongoStoreimportです.
const session = require('express-session');
const MongoStore = require('connect-mongo');

app.use(session({
  secret: 'foo',
  store: MongoStore.create(options)
}));
そしてこのように使って終わりました.
MongoStore.create(options)
}));
もちろん何種類かoptionsを作らなければなりませんが、後でします.server.jsから
import MongoStore from "connect-mongo";
そしてMongoStore.createMongo databaseを持つURLconfiguration objectにします.
app.use(session({
  store: MongoStore.create({ mongoUrl: 'mongodb://localhost/test-app' })
}));
でももう知ってるもうやってみたから.db.jsから
import mongoose from "mongoose";

mongoose.connect("mongodb://127.0.0.1:27017/wetube", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});
URLを貼り付けます.
そしてここを見ると、session middlewareにはoptionがあり、storeです.
app.use(session({
  store: MongoStore.create({ mongoUrl: 'mongodb://localhost/test-app' })
}));
言い換えれば、defaultとは異なるstoreを設定することができる.
だからserver.jsから.
app.use(
  session({
    secret: "Hello!",
    resave: true,
    saveUninitialized: true,
    store: MongoStore.create({ mongoUrl: "mongodb://127.0.0.1:27017/wetube" }),
  })
);
MongoStore.create({})optionsを送信するには、optionが1つしか必要ありません.
使用するMongoDB番バスのurl番バスです.まず今福貼db urlを貼るのはあまりよくありません
この部分は次の部分で修正されます.ここはsecretを隠すからです.mongoUrlと書いて/を貼って、同じdatabaseを入れます.nodeまでエラーはありません.しかし、セッションはMongoDB databaseに格納される.
ではMongoDB databaseに行きましょう入力show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
wetube  0.000GB
入力use wetube
switched to db wetube
入力show collections
sessions
users
videos
sessionsが発生しました.そしてdb.sessions.find()と入力し、今は何も見えません.sessionsは存在しないからです.今からsessionsを作ります.
セッションは、ブラウザがバックエンドにアクセスしたときに作成されます.それがあれば、セッションを作成できます.
http://localhost:4000/から更新してみます.db.sessions.find()と入力します
{ "_id" : "TTjJn-LH58wP-4hIiqxP3aVekD0sDFqQ", "expires" : ISODate("2022-04-30T11:02:36.717Z"), "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}" }
セッションが確立されました.idを所有し、expiration date(満期)もある.
この日以降、今はuserを忘れます.sessioncookieなどがあります.コードを保存してサーバを再起動しても、DBに記憶されます.
覚えているか確認するために登録しておけば良いのですが、session databaseも確認しておけば
{ "_id" : "TTjJn-LH58wP-4hIiqxP3aVekD0sDFqQ", "expires" : ISODate("2022-04-30T11:02:36.717Z"), "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}" }
> db.sessions.find()
{ "_id" : "TTjJn-LH58wP-4hIiqxP3aVekD0sDFqQ", "expires" : ISODate("2022-04-30T11:08:31.637Z"), "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"loggedIn\":true,\"user\":{\"_id\":\"625942ace3564e09811a5f21\",\"email\":\"[email protected]\",\"username\":\"Cyber Lover\",\"password\":\"$2b$05$WMO/VH/yctvvPJST0SyLq.QRQfSNeLJ5zAJPFfRMwLgg5ZFq1KtBm\",\"name\":\"Mercury\",\"location\":\"NYC\",\"__v\":0}}" }
ご覧のように、セッションは同じid"loggedIn\":trueuser objectを有します.
では、バックエンドを閉じて、再開します.そして更新して、あなたがずっとログインしていることを確認します.
ログイン済み、バックエンドが死亡し、リフレッシュ後もログインを続行します.
サーバーにはもうログイン情報がないからです.この情報はMongoDBです.
今しなければならないのはこのstorageを書くだけです.
    store: MongoStore.create({ mongoUrl: "mongodb://127.0.0.1:27017/wetube" }),
このセクションをクリアすると、セッションはサーバのメモリに格納されます.サーバを再起動するたびに
メモリが消去されるので、セッションはdatabaseに保存されます.
そのため、サーバが20回再起動しても、databaseに誰かがログインしたデータがあります.
次のセクションでは、セッションに存在する問題を理解するためにいくつかの変更を行います.
あとURL部分も修正します.URLをコピーして、同じように使用するのが望ましいからです.
そして、このsecretは言ったように秘密であるべきだ.
app.use(
  session({
    secret: "Hello!",