2019๋ 8์ 9์ผ
passport.initialize(), passport.session() ํตํด passport๋ฅผ ๋ฏธ๋ค์จ์ด๋ก ๋ฑ๋ก์ํจ๋ค
- req.session ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- session์ ์ค์ ํ๋ ์ญํ ์ ํ๋ค.
- req ๊ฐ์ฒด์ passport ์ค์ ์ ์ฌ๋๋ค.
-
req.session ๊ฐ์ฒด์ passport ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
-
์ฃผ์) express-session์ ์ํด req.session๊ฐ ๊ฐ์ฒด ์์ฑ๋์ด์ผ passport ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ค.
-
๋ฐ๋ผ์ passport ๋ฏธ๋ค์จ์ด๋ ๋ฐ๋์ express-session ๋ค์ ์ ์ธํด์ผ ํ๋ค.
-
sessionId
๋ฅผ ๋ง๋๋ ์ญํ -
๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์คํ๋๋ค.
-
req.session ๊ฐ์ฒด์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ง ์ ํํ๋ค. โ ์ธ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ์ด์ง ์ด๋์์๋ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์ ์ง ๋๋ค.
-
user ๊ฐ์ฒด๋ฅผ ๋ชจ๋ ์ ์ฅํ๋ฉด ๋ฐ์ดํฐ ์ฉ๋์ด ์ปค์ง๊ณ ์ผ๊ด์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ id๋ง ์ ์ฅํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ ์ต์ํ์ผ๋ก ์จ์ผํ๋ฏ๋ก ์ต์ ์ ๋ณด๋ง ์ ์ฅํ๋ค. (user๊ฐ์ฒด๊ฐ ์๋
user.id
๋ง ์ ์ฅ) -- ์ด๊ฒsessionId
๊ฐ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ ์ต์ํ์ผ๋ก ์จ์ผํ๋ฏ๋ก ์ต์ ์ ๋ณด๋ง ์ ์ฅํ๋ค. (user๊ฐ์ฒด๊ฐ ์๋
-
sessionId
๋ฅผ ์ด์ฉํด์user ๊ฐ์ฒด
๋ฅผ ๊ฐ์ ธ์ค๋ ์ญํ -
์๋ฒ๋ก ๋ค์ด์ค๋ ๋งค ์์ฒญ(request)๋ง๋ค ํธ์ถ๋๋ค.
-
๋งค ํธ์ถ๋ง๋ค db๋ฅผ ์ฝ์ด
sessionId
์ ํด๋นํ๋user ๊ฐ์ฒด
๋ฅผ ๊ฐ์ ธ๏ฟฝ์จ๋ค. -
req.user
์user ๊ฐ์ฒด
๋ฅผ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ req.user๋ฅผ ํตํด ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
serializeUser
: ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ฒด๋ฅผ ์ธ์ ์ ์ ์ฅํ๋ค.
deserializeUser
: ์ธ์ ์ ์ ์ฅํ ์์ด๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์จ๋ค.
- ๋ก๊ทธ์ธ ์์ฒญ์ด ๋ค์ด์จ๋ค.
passport.authenticate
๋ฉ์๋ ํธ์ถ- ๋ก๊ทธ์ธ ์ ๋ต ์ํ
- ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ฒด์ ํจ๊ป
req.login
ํธ์ถ req.login
๋ฉ์๋๊ฐpassport.serializeUser
ํธ์ถreq.session
์ ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ โ ๋ณดํต id๋ง ์ ์ฅ- ๋ก๊ทธ์ธ ์๋ฃ
- ๋ชจ๋ ์์ฒญ์
passport.session()
๋ฏธ๋ค์จ์ด๊ฐpassport.deserializeUser
๋ฉ์๋ ํธ์ถ req.session
์ ์ ์ฅ๋ ์์ด๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์กฐํ- ์กฐํ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ
req.user
์ ์ ์ฅ - ๋ผ์ฐํฐ์์
req.user
๊ฐ์ฒด ์ฌ์ฉ ๊ฐ๋ฅ
isAuthenticated()
isAuthenticated
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ก๊ทธ์ธ ํ๋จ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.- ๋ก๊ทธ์ธ ๋ ์ ์ ์ ๊ฒฝ์ฐ true๋ฅผ ๋ก๊ทธ์ธ ๋์ด์์ง ์์ ๊ฒฝ์ฐ๋ false๋ฅผ ๋ฆฌํดํ๋ค.
- ๋ก๊ทธ์ธํ ์ ์ ๋
next()
๋ฅผ ํธ์ถ ํด ๋ค์ ์์ ์ ์งํํ๊ฒ ๋๋ค. - ๋ก๊ทธ์ธํ์ง ์์ ์ ์ ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ์์ผ ๋ก๊ทธ์ธ์ ์ ๋ํ ์ ์๋ค.
exports.isLoggedIn = (req, res, next) => {
if (req.isAuthenticated()) {
return next();
} else {
req.flash('error_msg', '๋ก๊ทธ์ธ ํ ์ด์ฉํด์ฃผ์ธ์.');
res.redirect('/auth/signin');
}
};
- ์๋์ ๊ฐ์ด ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ํ ์ ์ ๋ง ๊ฒ์๊ธ์ ํธ์งํ๋๋ก ํ๋ ๋ก์ง์ ๋ง๋ค ์ ์๋ค.
router.get('/edit/:id', isLoggedIn, asyncMiddleware(async (req, res) => {
const article = await Article.findOne({
_id: req.params.id
});
if (article) {
res.render('articles/edit', {
article: article
});
}
}));
- ๋ก๊ทธ์์์ ์๋์ ๊ฐ์ด
req.logout()
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ ํ ์ ์๋ค. - ๋ก๊ทธ์์์ ๋ก๊ทธ์ธ ๋ ์ ์ ๋ง ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก
isLoggedIn
๋ฅผ ์ฌ์ฉํ๋ค.
// ๋ก๊ทธ ์์
router.get('/logout', isLoggedIn, (req, res) => {
req.logout();
req.flash('success_msg', 'You are logged out');
res.redirect('/auth/signin');
});