-
#13 Auth 기능 만들기Node.js/[챕터1] 2021. 6. 8. 00:28728x90
[1] middleware 폴더생성 auth.js 파일생성
/middleware/auth.js const { User } = require("../models/User"); let auth = (req, res, next) => { //인증 처리를 하는곳 //클라이언트 쿠키에서 토큰을 가져온다. let token = req.cookies.x_auth; //토큰을 복호화 한후 유저를 찾는다. User.findByIdToken(token, (err, user) => { if(err) throw err; if(!user) return res.json({ isAuth : false, err: true}) //라우터에서 req.token , req.user이런식으로 사용할 수 있게 할려고 넣어줌 req.token = token; req.user = user; next(); }) //유저가 있으면 인증 Okay //유저가 없으면 인증 NO! } module.exports = {auth};
[2] 라우터에 auth추가하기
index.js const { auth } = require("./middleware/auth"); // 위에 추가 //role 0 -> 일반유저 role 0이 아니면 관리자 app.get('/api/users/auth', auth, (req, res) =>{ //auth 미들웨어가 성공적으로 통과했을때! 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 }) })
[3]User모델에 findByIdToken추가
userSchema.statics.findByIdToken = function(token, cb){ let user = this; //토큰을 복호화 한다. jwt.verify(token, 'secretToken', function (err, decoded){ //유저 아이디를 이용해서 유저를 찾은 다음에 //클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인 user.findOne({"_id" : decoded, "token" : token}, function(err,user){ if(err) return cb(err) cb(null, user) }) }) }
728x90'Node.js > [챕터1]' 카테고리의 다른 글
#16 Create-React-App (0) 2021.07.10 #14 로그아웃 기능 (0) 2021.06.08 #12 토큰 생성 with jsonwebtoken (0) 2021.06.07 #11 로그인 기능 with Bcrypt (1) (0) 2021.06.07 #10 Bcrypt로 비밀번호 암호화 하기 (0) 2021.06.07