Logged In User #02
34293 ワード
Response objectから何かを知る必要があります。
これを理解するために,
session
を理解するために書かれたmiddleware
を用いた.server.js
からapp.use((req, res, next) => {
console.log(res);
req.sessionStore.all((error, sessions) => {
console.log(sessions);
next();
});
});
resonse object
,console.log
.そして確認して更新後にエラーが発生しました.どうでもいい
node
を見るとconsole.log
がたくさんありますResponse object
で知りたいのがlocals
です. locals: [Object: null prototype] {},
ご覧のように、locals
は空のobject
です.この空いている
object
は良いニュースです.pug template
からlocals
に近づくことができる.これは基本的に可能です他にやる必要はない.
pug
およびExpress
locals
を共有できます.これはどういう意味ですか.
locals object
を変えると言ったら、template
からlocals object
の内容を確認できます.確認しよう
app.use((req, res, next) => {
res.locals.sexy = "you";
req.sessionStore.all((error, sessions) => {
console.log(sessions);
next();
});
});
こうしてlocals object
に1つ追加されました.pug
ファイルはすべてlocals object
にアクセスできます.また、
base.pug
でも変更されます.body
header
h1 Who is sexy? #{sexy}
nav
ul
li
a(href="/") Home
li
a(href="/join") Join
li
a(href="/login") Login
li
a(href="/search") Search
li
a(href="/videos/upload") Upload Video
なお、今回のみ、pageTitle
を変更する.Who is sexy?
、#{sexy}
と書きます.このまま書けばいいlocals.
とかは使いません.起動できるかどうか見てみましょう.
pageTitle
出力は"Who is sexy? you"
です.このようにして、
templates
およびdata
が共有される.そしてこれはglobal
(グローバル変数)ですtemplate
はすべて使えます.ご覧のように、このtitle
は変わっていません.他の場所に回っても、ずっと保持されています.また、
locals
はtemplate
のすべての場所に位置している.もちろん、
middleware
がrouter
に適用される場合に限られる.template
からsexy
という変数が使用できるようになりました.とても良いニュースですこれは、
template
変数をグローバルに送信できることを意味する.変数を
res.render
に送信する必要はありません.locals object
template
ですグローバルに送信できます.
言い換えれば、
locals object
はすでにpug template
からimport
のすべてのobject
である.これでも試してみてください.
app.use((req, res, next) => {
res.locals.sexy = "you";
res.locals.siteName = "Wetube";
req.sessionStore.all((error, sessions) => {
console.log(sessions);
next();
});
});
そしてbase.pug
です.head
title #{pageTitle} | #{siteName}
このように交換します.これはlocals object
以内であるべきだと改めて強調した.リフレッシュすると
Wetube
がよく適用されます.app.use((req, res, next) => {
res.locals.sexy = "you";
res.locals.siteName = "xxxxxXXXXX";
req.sessionStore.all((error, sessions) => {
console.log(sessions);
next();
});
});
このように変更してリフレッシュすると、xxxxxXXXXX
に適用されます.これは
locals object
で、本当に役に立ちます.locals
にログインしているユーザーを追加するためです.これは、
template
が誰がログインしたのかを知ることができることを意味します.siteName
のようなものも本当に役に立ちます.だからmiddleware
を作ります.pageTitle
に戻ります.middleware
を作成します.src
フォルダにmiddleware
ファイルを作成します.この
middleware
をlocalsMiddleware
といいます.export const localsMiddleware = (req, res, next) => {
res.locals.siteName = "Wetube";
};
req,res
およびnext
が受信され、ここではlocals
が設定される.いくつかのlocals
を設定します.例えば、
siteName
およびWetube
である.これは
middleware
です.localsMiddleware
.server.js
からimport { localsMiddleware } from "./middleware";
app.use((req, res, next) => {
req.sessionStore.all((error, sessions) => {
console.log(sessions);
next();
});
});
app.use(localsMiddleware);
このように修正してapp.use(localsMiddleware);
を追加すると、自動的にimport
にはなりません.別に作ってくれました.
作成する
middlewares
をすべてmiddleware
ファイルに追加します.これからやるべきことはもう決まった.
locals
で誰がログインしたのかを共有します.ではもう一度登録してみましょうその前に、ここでは
req.session
およびconsole.log
を試みた.export const localsMiddleware = (req, res, next) => {
console.log(req.session);
res.locals.siteName = "Wetube";
next();
};
コンソールウィンドウをリフレッシュ、ログインして表示します.Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
loggedIn: true,
user: {
_id: '625942ace3564e09811a5f21',
email: '[email protected]',
username: 'Cyber Lover',
password: '$2b$05$WMO/VH/yctvvPJST0SyLq.QRQfSNeLJ5zAJPFfRMwLgg5ZFq1KtBm',
name: 'Mercury',
location: 'NYC',
__v: 0
session
、cookie, loggedIn, user
があります.[Object: null prototype] {
tW3l1LCHc8Zc0urTdDkEnlo1xRh2uhV7: {
これはmiddleware
で、上の部分はlocals
からの内容です.ご覧のように、
localsMiddleware
はreq.session
に近づくことができます.そして、これは本当に重要だと改めて強調しました.
これは
localsMiddleware
がsession middleware
になってから可能になったからですapp.use(
session({
secret: "Hello!",
resave: true,
saveUninitialized: true,
})
);
localsMiddleware
をここに移すとapp.set("view engine", "pug");
app.set("views", process.cwd() + "/src/views");
app.use(logger);
app.use(express.urlencoded({ extended: true }));
app.use(localsMiddleware);
app.use(
session({
secret: "Hello!",
resave: true,
saveUninitialized: true,
})
);
session
は表示されません.undefined
[Object: null prototype] {}
コンソールウィンドウはこのように出てきます現在、
localsMiddlware
はsession middelware
の後に位置しています.このようにしてこそ、
localsMiddleware
はsession object
に近づくことができる.コンソールを再リフレッシュして確認すると、
[Object: null prototype] {}
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}
出力session
.また、この
middleware
は削除されます.app.use((req, res, next) => {
req.sessionStore.all((error, sessions) => {
console.log(sessions);
next();
});
});
私はバックエンドで覚えているすべての人を見たいだけです.それではここで
session
を確認してみます.コンソールウィンドウを表示します.Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}
ログインする前に何かをします.export const localsMiddleware = (req, res, next) => {
res.locals.loggedIn = Boolean(req.session.loggedIn);
res.locals.siteName = "Wetube";
console.log(res.locals);
next();
};
ログイン時の様子を見てみることにしました.req.session
のloggedIn
がtrue
ならif(req.session.loggedIn){
res.locals.loggedIn = true;
}
これはもうちょっと修正すればいいです.res.locals.loggedIn = req.session.loggedIn;
しかし、この値はfalse
であってもよいし、undefined
であってもよい.Boolean()
を使用して、この値がtrue
またはfalse
であることを確認します. res.locals.loggedIn = Boolean(req.session.loggedIn);
だからこうして出てきたそして
res.locals
をconsole.log()
に撮影どんな結果になるか見てみましょう.もう一度更新します.
コードを保存し、より良いセッションストレージを設定できないためです.
すべてのセッションが消えました.
[Object: null prototype] { loggedIn: false, siteName: 'Wetube' }
GET / 304 191.753 ms - -
これから分かるように、これらの価格はlocals
です.リフレッシュごとlocals
あります.このobject
とtemplate
が共有されていることが今になって分かった.だからこれはどういう意味ですか.
li
a(href="/") Home
if loggedIn
li
a(href="/logout") Log Out
else
li
a(href="/join") Join
li
a(href="/login") Login
この部分では、ログインしたと言ったら、何かを展示します.もしそうでなければ、私はあなたにこれらを見せます.
user
が既にログインしている場合ログアウトボタンを見せます.そして
logout
と書きます.pugファイルから地元の人にアクセスできるのを覚えています。
locals
の値を与えると、pug
が読めます.これがlocals
です.loggedIn
の値がfalse
siteName
の値がWetube
です.[Object: null prototype] { loggedIn: false, siteName: 'Wetube' }
GET / 304 191.753 ms - -
ログインして結果を見てみましょう.登録しましたが、logout
ありました.[Object: null prototype] { loggedIn: true, siteName: 'Wetube' }
GET / 200 57.525 ms - 593
コンソールを見るとlocals
ならloggedIn: true
ただいまログインしておりますリフレッシュも保持されています.別のブラウザを試します.ご覧のように、ここにはログインしていません.防根認証システムを構築した.
Login
、join
、비밀번호 암호화
は現在express
であり、セッションもCookieも処理しています.プレイヤー間では区別もできます.
req.session
にuser
があったのを覚えています.ここにはreq.session
とuser
があります.[Object: null prototype] {
tW3l1LCHc8Zc0urTdDkEnlo1xRh2uhV7: {
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
}
この値はtemplate
と共有できます.やってみるexport const localsMiddleware = (req, res, next) => {
res.locals.loggedIn = Boolean(req.session.loggedIn);
res.locals.siteName = "Wetube";
res.locals.loggedInUser = req.session.user;
next();
};
この値段は最初はundefined
だったはずです.ログインしていないので.コードを保存しようとします.ご覧のように、リフレッシュ後に再ログアウトします.
この部分は次の部分で行います.その前にこちらに来てください.
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
navigation
これはまだ存在しません.a(href="/my-profile")
で何をしたか、ログインしている場合はbase.pug
ボタンを表示します.logout
のおかげで、locals middleware
がありました.これは
loggedInUser
req.session.user;
かもしれないからです.undefined
未登録の場合はuser
は使用できません.しかし、この部分では、確かに
loggedInUser
が登録されています.ログインしたら
user
の値があることを意味しますloggedInUser
を使用できます.loggedInUser.name
にloggedInUser
があることを知っているからです.もう一度やってみる.再登録するとそのプレイヤーの名前+24579142が表示されます.
現在、この価格は
name
のすべての場所で共有されています.現在、
Profile
とtemplate
はありません.ご覧のように、この価格はProfile
と共有されています.ログインシステムを構築したばかりです.
LogOut
およびtemplate
、Session
、Cookie
、패스워드 암호화
が使用される.そして
패스워드 비교
を用いてlocals
戦区で変数を用いる方法を学習した.コードを保存するたびにpugが初期化されていることを覚えておいてください。
コードを再保存し、ホームページにリフレッシュしてログアウトします.
現在、コードを保存するたびに
Session
が消えています.サーバはユーザーを忘れます.Reference
この問題について(Logged In User #02), 我々は、より多くの情報をここで見つけました https://velog.io/@0_cyberlover_0/Logged-In-User-02テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol