Recap


今までやったことを復習して


私はただ何が起こったのか復習しているだけです.1つ目は、ここに示すmiddlewareを生成する.server.jsから
app.use(
  session({
    secret: "Hello!",
    resave: true,
    saveUninitialized: true,
  })
);
このmiddlewareexpress-sessionという不起なmoduleから得られたものです.
このmiddlewareの役割は、ブラウザがバックエンドと対話するたびに、session、すなわちmiddlewareは、鄭州にcookieを伝送する.
では、cookieとは何でしょうか.cookieはバックエンドがブラウザに提供する情報です.cookieには一定のルールがあるので、バックエンドでrequestを実行するたびに、
ブラウザは、requestcookieを追加します.
だからこれのために他にやることはない
ここに示すmiddlewareはブラウザにCookieを送信し、ブラウザはcookieを使用して何をしますか?
どこに置くか知っています.また、ブラウザは毎回バックエンドlocalhostにありますURLrequestが送信される毎に、cookierequestと共に送信されることも知られている.
では、cookieにはどんな情報が含まれているのでしょうか.どんな情報でも参加できます.
数字をつけてもいいし、名前をつけてもいいし、どんな情報を入れてもいいです.
今置くのはsession IDです.
バックエンドへのブラウザの接続が永続的ではないためです.httpを使用しているので、httpstatelessです.home pageに入るとconnectionが開き、renderが終了し、connectionが切れました.connectionはずっと維持できません.
例えば、WIFIルータの関係から見ると、それは常にconnectionに維持されている.WiFIルーターは接続するとずっとつながっています.
これがWIFIルータと情報を交換できる理由です.
しかし、ブラウザとバックエンドでは、アクティブなconnectionは1つもありません.connectionは、renderまたはredirectで終了するpost requestが送信された場合、または応答が受信されなかった場合、connectionは直ちに終了する.
したがって、ユーザにsession IDを与える.session IDを置く場所がcookieです.
2つあり、1つは2479142で、バックエンドのフロントエンドで情報交換を行います.
もう一つはcookieです.したがって、session IDは、ブラウザで見ることができる例である.
チェック->アプリケーション->Cookie->ローカルホスト、すなわちsession ID.
ブラウザにはsession IDがあり、session IDが含まれています.
バックエンドは現在、使用中のcookieを覚えています.

言い換えれば、セッションIDとクッキーは2つの異なる概念である。

sessionは情報を交換する方法にすぎない.cookieは自動処理されているので、本当にいいです.cookieを受信および送信する過程で、ユーザは何もしなくてもよいし、個別のコードを記述する必要もない.cookieの基準に従っているからです.これはhttpです.
もう1つはcookieであり、session IDに格納されている.
日立cookiecookieを転送するために使用されているからです.違います
いずれにしても、session IDsession ID内に格納され、ここの後端にも格納されることに重点を置いている.
バックエンドは、使用されているcookieをすべて維持します.ここでいくつかの問題があります.
その決定は次の部分で議論される.
バックエンドは、生成されたすべてのsession IDを管理する.
4人のユーザがいれば、session IDは4人のsession storeである.

今sessionについて話しましょう。

session storesession storeを貯蔵する場所です.コードを保存するたびにサーバが再起動されます.sessionが消えます.これはテストのためのリポジトリだからです.
コードを再保存すると、サーバは再起動し、session storeも再起動します.
したがって、現在のsession storeは無効になります.リフレッシュすると、
新しいcookieが入ります.全く違うcookieだからです.
次のセクションでは、このセクションを修正して、cookiecookie storeを接続します.
ホームページでリフレッシュすると、同じcookie storeがもらえます.
バックエンドはMongoDBcookieが格納されているからである.
したがって、session storesession Idは異なる.sessionを使用して、どのブラウザのcookieかを知ることができます.
次に、ユーザーがログインすると、cookieで発生します.session IDにいくつかの情報を追加します.これは非常に重要な部分です.usercontrllerブラウザは秘密モードとは違います.したがって、req.sessionはブラウザによって異なるように見えます.
パッと見る例えば、ここにreq.sessionreq.sessionがある場合req.sessionから
export const localsMiddleware = (req, res, next) => {
  console.log(req.sessionID);
  res.locals.loggedIn = Boolean(req.session.loggedIn);
  res.locals.siteName = "Wetube";
  res.locals.loggedInUser = req.session.user;
  next();
};
違うものが見えます.Secretモードのconsole.logと通常モードのmiddlewares.jsが異なることがわかる.
JFYtvxHaSl5Nr4drpZoV2i4N2uip_1OA
GET / 304 165.473 ms - -
xcJGg-kLwAvYybcdLp_MljPPy4purDYJ
GET / 304 43.062 ms - -
異なるsession IDを持っています.したがって、同じコードでも、異なるブラウザで異なる結果が生成されます.
だから、私が言ったように、ブラウザごとに異なるsession IDがあるので、session IDに追加されました.
これはreq.sessionなので、req.session objectobjectなので、欲しいものを追加することができます.
ここでは、ユーザー登録時にsessionobjectに設定する2つのオプションが追加されています.loggedInから
  req.session.loggedIn = true;
  req.session.user = user;
  return res.redirect("/");
};
trueで見つけたユーザデータをuserController.jsに入れる.
現在DB件に入っています.したがって、userはどこでも使用できます.
これはreq.sessionの中にあるからです.
次にreq.session.userを追加し、controllerを変数とした.req.sessionから
    body 
        header
            h1=pageTitle
            nav 
                ul 
                    li  
                        a(href="/") Home
                    if loggedIn
                        li 
                            a(href="/logout") Log Out
                        li 
                            a(href="/my-profile") #{loggedInUser.name} Profile
                    else 
                        li 
                            a(href="/join") Join
                        li 
                            a(href="/login") Login
この変数にはloggedInUser.nameはありません.loggedInを実行しても、この変数は送信されません.base.pugを作ったからです

今renderについて話しましょう。

render functionは何でもできるlocalsMilddelwareです.localsから
export const localsMiddleware = (req, res, next) => {
  res.locals.loggedIn = Boolean(req.session.loggedIn);
  res.locals.siteName = "Wetube";
  res.locals.loggedInUser = req.session.user;
  next();
};
追加することも削除することもできますが、このlocalsには欲しいものを入れることができます.
また、objectmiddlewares.jsに近いと確信できる.objectおよびtemplateに設定されています.
したがって、ここで見た3つのものをlocals objectに入れると、どこからでもpugに近づくことができます.expressまたはlocals objectは必要ありません.pug templateの中に入れておけば、importで使えます.