Toggle navigation
Toggle navigation
This project
Loading...
Sign in
MotherProject
/
myYoutube
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Flare-k
2020-06-16 21:30:24 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0e7e899033e8a0915a4240452b34f3c64616148c
0e7e8990
1 parent
e0d16dcc
[Modified] User Detail
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
14 additions
and
32 deletions
controllers/userController.js
middlewares.js
routers/globalRouter.js
routes.js
text/study.txt
views/partials/header.pug
views/userDetail.pug
controllers/userController.js
View file @
0e7e899
...
...
@@ -87,6 +87,9 @@ export const logout = (req, res) => {
res
.
redirect
(
routes
.
home
);
};
export
const
getMe
=
(
req
,
res
)
=>
res
.
render
(
"userDetail"
,
{
pageTitle
:
"User Detail"
,
user
:
req
.
user
});
// export const users = (req, res) => res.render("users", { pageTitle: "Users" });
export
const
userDetail
=
(
req
,
res
)
=>
res
.
render
(
"userDetail"
,
{
pageTitle
:
"User Detail"
});
...
...
middlewares.js
View file @
0e7e899
...
...
@@ -6,7 +6,7 @@ const multerVideo = multer({ dest: "uploads/videos/" });
export
const
localsMiddleware
=
(
req
,
res
,
next
)
=>
{
res
.
locals
.
siteName
=
"my Youtube"
;
res
.
locals
.
routes
=
routes
;
res
.
locals
.
u
ser
=
req
.
user
||
null
;
res
.
locals
.
loggedU
ser
=
req
.
user
||
null
;
next
();
};
...
...
routers/globalRouter.js
View file @
0e7e899
...
...
@@ -10,6 +10,7 @@ import {
postLogin
,
githubLogin
,
postGithubLogin
,
getMe
,
}
from
"../controllers/userController"
;
import
{
onlyPublic
,
onlyPrivate
}
from
"../middlewares"
;
...
...
@@ -33,5 +34,5 @@ globalRouter.get(
passport
.
authenticate
(
"github"
,
{
failureRedirect
:
"/login"
}),
postGithubLogin
);
globalRouter
.
get
(
routes
.
me
,
getMe
);
export
default
globalRouter
;
...
...
routes.js
View file @
0e7e899
...
...
@@ -10,6 +10,7 @@ const USERS = "/users";
const
USER_DETAIL
=
"/:id"
;
const
EDIT_PROFILE
=
"/edit-profile"
;
const
CHANGE_PASSWORD
=
"/change-password"
;
const
ME
=
"/me"
;
// Videos
const
VIDEOS
=
"/videos"
;
...
...
@@ -63,6 +64,7 @@ const routes = {
},
gitHub
:
GITHUB
,
githubCallback
:
GITHUB_CALLBACK
,
me
:
ME
,
};
// template에서 직접 접근이 필요한 경우 함수로 바꿔준다.
export
default
routes
;
...
...
text/study.txt
deleted
100644 → 0
View file @
e0d16dc
express session을 설치한다. npm install express-session
postJoin은 이메일과 비밀번호를 전달하고 next()가 호출되어 postLogin으로 간다.
connect mongo를 통해 저장소를 생성한다.
- 인증에 대한 정리 -
유저네임과 비밀번호를 이용한 방식(local 방식)은 비교적 간단하다. 유저네임과 비밀번호를 post 방식으로 전달하고
설치해준 플러그인인 Mongoose가 자동으로 체크를 해준다. 만약 비밀번호가 맞으면 passport에게 맞다고 알려주고
passport는 쿠키를 생성한다.
소셜로그인의 경우에는 조금 다르다
먼저 사용자는 깃허브 사이트로 이동하게 되고 거기에서 권한 승인을 한다.
그 이후에 깃헙 사이트는 우리에게 해당 사용자의 정보를 보내주는데 /auth/github/callback이라는 URL로 오게 된다
그렇게 되면 passport가 함수를 호출하는데 githubLoginCallback이라는 우리가 만들어준 함수이다.
passport가 이함수를 실행하는 것이다.
이 함수는 모든 사용자 프로필 정보를 받고 이 정보로 필요한 것을 할 수 있다.
githubLoginCallback 함수의 한가지 조건은 callback(cb) 함수를 리턴해야하는 것이다.
cb 함수를 실행시켜서 에러가 있는지 유저가 있는지 알려줘야 한다.
에러가 존재하면 passport는 에러가 있구나 유저는 없구나하고 끝내고
유저가 존재하면 passport는 이 유저를 가져와 쿠키를 만들고 저장한다.
이렇게 저장된 쿠키를 브라우저로 보내게 된다.
globalRouter에서 깃허브로 갈때 githubLogin이 실행되는데 깃허브로 보내주는 역할을 한다.
그리고 githubCallback(URL)로 돌아왔을 때 passport는 사용자가 알려준 함수인 githubLoginCallback을 실행시킨다.
만약 user를 찾으면 passport는 통과시키며 postGithubLogin을 실행하고 홈으로 리다이렉트한다.
views/partials/header.pug
View file @
0e7e899
...
...
@@ -8,7 +8,7 @@ header.header
input(type="text", placeholder="Search by term...", name="term")
.header__column
ul
if !
u
ser
if !
loggedU
ser
li
a(href=routes.join) Join
li
...
...
@@ -17,6 +17,6 @@ header.header
li
a(href=`/videos${routes.upload}`) Upload
li
a(href=routes.
userDetail(user.id)
) Profile
a(href=routes.
me
) Profile
li
a(href=routes.logout) Log out
...
...
views/userDetail.pug
View file @
0e7e899
extends layouts/main
block content
p Hello This is userDetail
\ No newline at end of file
.user-profile
.user-profile__header
img.avatar(src=user.avatarUrl)
h4.profile__username=user.name
\ No newline at end of file
...
...
Please
register
or
login
to post a comment