Flare-k

[Modified] User Detail

...@@ -87,6 +87,9 @@ export const logout = (req, res) => { ...@@ -87,6 +87,9 @@ export const logout = (req, res) => {
87 res.redirect(routes.home); 87 res.redirect(routes.home);
88 }; 88 };
89 89
90 +export const getMe = (req, res) =>
91 + res.render("userDetail", { pageTitle: "User Detail", user: req.user });
92 +
90 // export const users = (req, res) => res.render("users", { pageTitle: "Users" }); 93 // export const users = (req, res) => res.render("users", { pageTitle: "Users" });
91 export const userDetail = (req, res) => 94 export const userDetail = (req, res) =>
92 res.render("userDetail", { pageTitle: "User Detail" }); 95 res.render("userDetail", { pageTitle: "User Detail" });
......
...@@ -6,7 +6,7 @@ const multerVideo = multer({ dest: "uploads/videos/" }); ...@@ -6,7 +6,7 @@ const multerVideo = multer({ dest: "uploads/videos/" });
6 export const localsMiddleware = (req, res, next) => { 6 export const localsMiddleware = (req, res, next) => {
7 res.locals.siteName = "my Youtube"; 7 res.locals.siteName = "my Youtube";
8 res.locals.routes = routes; 8 res.locals.routes = routes;
9 - res.locals.user = req.user || null; 9 + res.locals.loggedUser = req.user || null;
10 next(); 10 next();
11 }; 11 };
12 12
......
...@@ -10,6 +10,7 @@ import { ...@@ -10,6 +10,7 @@ import {
10 postLogin, 10 postLogin,
11 githubLogin, 11 githubLogin,
12 postGithubLogin, 12 postGithubLogin,
13 + getMe,
13 } from "../controllers/userController"; 14 } from "../controllers/userController";
14 import { onlyPublic, onlyPrivate } from "../middlewares"; 15 import { onlyPublic, onlyPrivate } from "../middlewares";
15 16
...@@ -33,5 +34,5 @@ globalRouter.get( ...@@ -33,5 +34,5 @@ globalRouter.get(
33 passport.authenticate("github", { failureRedirect: "/login" }), 34 passport.authenticate("github", { failureRedirect: "/login" }),
34 postGithubLogin 35 postGithubLogin
35 ); 36 );
36 - 37 +globalRouter.get(routes.me, getMe);
37 export default globalRouter; 38 export default globalRouter;
......
...@@ -10,6 +10,7 @@ const USERS = "/users"; ...@@ -10,6 +10,7 @@ const USERS = "/users";
10 const USER_DETAIL = "/:id"; 10 const USER_DETAIL = "/:id";
11 const EDIT_PROFILE = "/edit-profile"; 11 const EDIT_PROFILE = "/edit-profile";
12 const CHANGE_PASSWORD = "/change-password"; 12 const CHANGE_PASSWORD = "/change-password";
13 +const ME = "/me";
13 14
14 // Videos 15 // Videos
15 const VIDEOS = "/videos"; 16 const VIDEOS = "/videos";
...@@ -63,6 +64,7 @@ const routes = { ...@@ -63,6 +64,7 @@ const routes = {
63 }, 64 },
64 gitHub: GITHUB, 65 gitHub: GITHUB,
65 githubCallback: GITHUB_CALLBACK, 66 githubCallback: GITHUB_CALLBACK,
67 + me: ME,
66 }; 68 };
67 // template에서 직접 접근이 필요한 경우 함수로 바꿔준다. 69 // template에서 직접 접근이 필요한 경우 함수로 바꿔준다.
68 export default routes; 70 export default routes;
......
1 -express session을 설치한다. npm install express-session
2 -
3 -postJoin은 이메일과 비밀번호를 전달하고 next()가 호출되어 postLogin으로 간다.
4 -
5 -connect mongo를 통해 저장소를 생성한다.
6 -
7 -- 인증에 대한 정리 -
8 -유저네임과 비밀번호를 이용한 방식(local 방식)은 비교적 간단하다. 유저네임과 비밀번호를 post 방식으로 전달하고
9 -설치해준 플러그인인 Mongoose가 자동으로 체크를 해준다. 만약 비밀번호가 맞으면 passport에게 맞다고 알려주고
10 -passport는 쿠키를 생성한다.
11 -
12 -소셜로그인의 경우에는 조금 다르다
13 -먼저 사용자는 깃허브 사이트로 이동하게 되고 거기에서 권한 승인을 한다.
14 -그 이후에 깃헙 사이트는 우리에게 해당 사용자의 정보를 보내주는데 /auth/github/callback이라는 URL로 오게 된다
15 -그렇게 되면 passport가 함수를 호출하는데 githubLoginCallback이라는 우리가 만들어준 함수이다.
16 -passport가 이함수를 실행하는 것이다.
17 -이 함수는 모든 사용자 프로필 정보를 받고 이 정보로 필요한 것을 할 수 있다.
18 -githubLoginCallback 함수의 한가지 조건은 callback(cb) 함수를 리턴해야하는 것이다.
19 -cb 함수를 실행시켜서 에러가 있는지 유저가 있는지 알려줘야 한다.
20 -
21 -에러가 존재하면 passport는 에러가 있구나 유저는 없구나하고 끝내고
22 -유저가 존재하면 passport는 이 유저를 가져와 쿠키를 만들고 저장한다.
23 -이렇게 저장된 쿠키를 브라우저로 보내게 된다.
24 -
25 -globalRouter에서 깃허브로 갈때 githubLogin이 실행되는데 깃허브로 보내주는 역할을 한다.
26 -그리고 githubCallback(URL)로 돌아왔을 때 passport는 사용자가 알려준 함수인 githubLoginCallback을 실행시킨다.
27 -만약 user를 찾으면 passport는 통과시키며 postGithubLogin을 실행하고 홈으로 리다이렉트한다.
...@@ -8,7 +8,7 @@ header.header ...@@ -8,7 +8,7 @@ header.header
8 input(type="text", placeholder="Search by term...", name="term") 8 input(type="text", placeholder="Search by term...", name="term")
9 .header__column 9 .header__column
10 ul 10 ul
11 - if !user 11 + if !loggedUser
12 li 12 li
13 a(href=routes.join) Join 13 a(href=routes.join) Join
14 li 14 li
...@@ -17,6 +17,6 @@ header.header ...@@ -17,6 +17,6 @@ header.header
17 li 17 li
18 a(href=`/videos${routes.upload}`) Upload 18 a(href=`/videos${routes.upload}`) Upload
19 li 19 li
20 - a(href=routes.userDetail(user.id)) Profile 20 + a(href=routes.me) Profile
21 li 21 li
22 a(href=routes.logout) Log out 22 a(href=routes.logout) Log out
......
1 extends layouts/main 1 extends layouts/main
2 2
3 block content 3 block content
4 - p Hello This is userDetail
...\ No newline at end of file ...\ No newline at end of file
4 + .user-profile
5 + .user-profile__header
6 + img.avatar(src=user.avatarUrl)
7 + h4.profile__username=user.name
...\ No newline at end of file ...\ No newline at end of file
......