Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 이클립스
- 건보필기
- 웹개발
- 연결요소의개수
- 후기
- HTML
- BOJ
- 확인문제
- 알고리즘
- algorithm
- 프로그래밍
- 정수내림차순으로배치하기
- 필기
- 필기후기
- 농은면접
- 한국재정정보원
- CSS
- 프로그래머스
- 수박수박수박수박수?
- 부스트코스
- 공부
- Linux
- 웹
- 백준
- 프로그래밍언어
- 웹프로그래밍
- 인강
- 코딩
- 중소기업면접
- java
Archives
- Today
- Total
공부하는 히욤이
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 #13 Auth 기능 만들기 본문
auth route 만들기
- 로그인 여부나, 해당 권한이 있는지 등을 체크하기 위해서
클라이언트에서는 토큰을 쿠키에 넣어주고 서버에서는 User DB에 토큰을 저장함
server에서의 토큰과 client의 토큰이 일치하는지 계속 확인함
user._id + 'secretToken' = token을 만듦
=>
'secretToken' => user._id 시크릿토큰을 디코드하면 user_id가 나옴
[index.js]
app.get('/api/users/auth', auth, (req, res) => {
// 미들웨어를 통과해 여기까지 왔다는 얘기는 Authentication이 true라는 말
res.status(200).json({
_id : req.user._id,
isAdmin : req.user.role === 0? false : true,
isAuth : true,
email : req.user.email,
name : req.user.name,
lastname : req.user.lastname,
role : req.user.role,
image : req.user.image
})
})
[auth.js]
const { User } = require("../models/User");
let auth = (req, res, next) => {
// 인증 처리를 하는 곳
// 클라이언트 쿠키에서 토큰을 가져온다.
let token = req.cookies.x_auth;
// 토큰을 복호화 한 후, 유저를 찾는다.
User.findByToken(token, (err, user) => {
if (err) {
throw err;
}
// user가 없으면
if (!user) {
return res.json({
isAuth : false,
error : true
})
}
// user가 있으면
req.token = token;
req.user = user;
next();
});
}
module.exports = { auth };
auth.js는 인증처리를 해주는 곳
클라이언트 쿠키에서 토큰을 가져오고 토큰을 복호화 한 후, 유저를 찾는다.
'x_auth'에 저장했기 때문에 req.cookies.z_auth로 토큰을 가져온다.
findByToken은 User.js에서 만든 자체적인 함수이다.
next()를 안해주면 다음으로 넘어가지 않고 계속 여기에 머물러 있는다.
[User.js]
userSchema.methods.findByToken = function(token, callback){
var user = this;
// token을 decode 한다.
jwt.verify(token, "secretToken", function(err, decoded) {
// decoded 된 것은 유저아이디
// 유저아이디를 이용해서 유저를 찾은 다음에
// 클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인
user.findOne({
"_id" : decoded,
"token" : token
}, function(err, user) {
if (err) {
return callback(err);
} else {
return callback(null, user);
}
})
});
}
verify는 jwt에서 제공하는 함수인데 decode 하는 함수이다.
'Programming > React+Node' 카테고리의 다른 글
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 #15-18 리액트란?/Create-React-App/npm npx/구조 설명 (0) | 2021.08.17 |
---|---|
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 #14 로그아웃 기능 (0) | 2021.08.17 |
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 #11-12 로그인 기능 with Bcrypt/토큰 생성 with jsonwebtoken (0) | 2021.08.14 |
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 #10 Bcrypt로 비밀번호 암호화 하기 (0) | 2021.08.13 |
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 #9 비밀 설정 정보 관리 (0) | 2021.08.13 |