#13 Auth 기능 만들기
2022. 8. 4. 21:27ㆍTIL/따라하며 배우는 노드 리액트
728x90
[인프런] 따라하며 배우는 노드, 리액트 시리즈 - 기본강의를 들으며 정리한 내용입니다.
페이지 이동 때마다 로그인 되어있는지 안되어 있는지, 관리자 유저인지 등을 체크하기위해서 필요
글을 쓸 때나 지울 때, 해당 권한이 있는지 등의 체크시에도 필요함
쿠키에 넣어준 토큰과 서버에 저장된 데이터가 동일한지 체크하는 과정
1. middleware폴더 생성, 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;
if(!user) return res.json({ isAuth: false, error: true })
req.token = token;
req.user = user;
next();
})
}
module.exports = { auth };
2. User.js 파일에 메소드 추가하기
userSchema.statics.findByToken = function (token, cb) {
let user = this;
jwt.verify(token, 'secretToken', function(err, decoded){
user.findOne({"_id": decoded, "token": token}, function(err, user){
if(err) return cb(err);
cb(null, user);
})
})
}
3. auth route 생성하기(index.js)
const { auth } = require('./middleware/auth');
app.get('/api/users/auth', auth, (req, res) => {
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
})
})
'TIL > 따라하며 배우는 노드 리액트' 카테고리의 다른 글
#16 Create-React-App (0) | 2022.08.04 |
---|---|
#14 로그아웃 기능 (0) | 2022.08.04 |
#11,12 로그인 기능 with Bcrypt, jsonwebtoken (0) | 2022.08.04 |
#10 Bcrypt로 비밀번호 암호화 하기 (0) | 2022.08.03 |
#9 비밀 설정 정보 관리 (0) | 2022.08.03 |