Mongo Store
9704 ワード
まず、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 storage
MemoryStore
で、実際に使用するために存在するものではありません.したがって、
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
が入力される.そして
MongoStore
とimport
です.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.create
、Mongo database
を持つURL
configuration 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
を忘れます.session
やcookie
などがあります.コードを保存してサーバを再起動しても、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\":true
とuser 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!",
Reference
この問題について(Mongo Store), 我々は、より多くの情報をここで見つけました https://velog.io/@0_cyberlover_0/Mongo-Storeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol