-
[Node.js] AUTH 만들기node.JS 2022. 1. 1. 22:05
페이지 이동 시 로그인이 되어있는 상태인지 CHK 할 수 있어야한다.
Client쪽 COOKIE 에 저장된 TOKEN을 DECODE 해서 SERVER로 가져온다. 그러기 위해 AUTH를 만든다.
request를 받은 후 callback function 하기 전 중간에서 'auth' 받아오기
middleware/auth.js 만들기
const { User } = require("../models/User"); //user model 불러오기 let auth = (req,res,next)=>{ //인증처리 //Client Cookie 에서 Token을 가져온다. let token =req.cookies.x_auth; //index.js에서 cookie에 넣을 때 x_auth 라는 이름을 이용하여 넣었다. //Token을 복호화한 후 유저를 찾는다. 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(); //index.js 에서 middleware에서 계속 진행할 수 있도록 작성 }) //유저가 있으면 인증 OK //유저가 없으면 인증 NO }
user.js에서 findByToken
참고 : token을 decode 하기 userSchema.statics.findByToken = function(token,cb){ var user = this; // user._id + '' = token //token을 decode 한다. jwt.verify(token, 'secretToken', function(err,decoded){ //decoded : decode된 user._id //user id 이용하여 user 찾은 후 client 에서 가져온 token과 //DB 에 보관된 token이 일치하는지 확인하기 user.findOne({"_id": decoded, "token": token}, function(err,user){ //findOnde:mongodb에서 제공하는 메소드 if(err) return cb(err); cb(null,user) }) }) }
index.js
const {auth} = require('./middleware/auth'); app.get('/api/users/auth',auth,(req,res)=>{ //여기까지 middleware(auth)를 통과했다는 얘기는 authentication이 true 라는 말 res.status(200).json({ _id: req.user._id, isAdmin: req.user.role === 0? false : true, //0이면 일반 user, 0이 아니면 advisor isAuth : true, email: req.user.email, name: req.user.name, lastname: req.user.lastname, role: req.user.role, image: req.user.image }) })
728x90'node.JS' 카테고리의 다른 글
[Node.js] 로그인 / 토큰 생성 with JSON WEB TOKEN (0) 2021.12.31 [node.js] bcrypt로 비밀번호 암호화하기 (0) 2021.12.31 [Node.js] Nodemon 설치 (0) 2021.12.28 [Node.js] 회원가입 기능 만들기 (0) 2021.12.28 [Node.js] Mongoose schema 만들기 (0) 2021.12.28