Auth route
- 페이지 이동 때마다 로그인 여부와 권한 확인
- 글쓰기/수정/삭제 시 권한 체크

Cookie에 저장된 Token을 Server로 가져와 복호화 -> User ID
- middleware/auth.js 생성: 인증 처리
//User.js
userSchema.statics.findByToken = function(token, cb) {
const user = this;
// user._id + '' = token
// 토큰 decode
jwt.verify(token, 'secretToken', function(err, decoded) { // decoded == user._id
// 유저아이디를 이용하여 유저를 찾고 클라이언트에서 가져온 token과 DB 보관 토큰 일치 확인
user.findOne({ "_id": decoded, "token": token}, function(err, user) {
if(err) return cb(err)
cb(null, user)
})
});
}
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;
// 유저가 없으면 인증 실패
if(!user) return res.json({ isAuth: false, error: true})
// 유저가 있으면 인증 성공
req.token = token; // next 함수로 전달
req.user = user;
next();
})
}
module.exports = { auth };
// role 0 -> 일반유저
app.get('/api/users', 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
})
})

Logout Route
- 로그아웃 하려는 유저를 DB에서 찾아 토큰 삭제
app.get('/api/users/logout', auth, (req, res) => {
User.findOneAndUpdate( { _id: req.user._id }, { token: "" }, (err, user) => {
if(err) return res.json({ success: false, err });
return res.status(200).send({
success: true
})
})
})
'개발 > JavaScript' 카테고리의 다른 글
| [TypeScript] Functions (0) | 2022.08.04 |
|---|---|
| [TypeScript] Types (0) | 2022.08.04 |
| [Node.js] login route (0) | 2022.07.22 |
| [Node.js] 정보보호, Bcrypt (0) | 2022.07.21 |
| [Node.js] npm, express, mongoDB, 라이브러리 (0) | 2022.07.21 |