본문 바로가기
공부/nodejs

Auth 기능

by 매일삼겹살 2021. 6. 13.
반응형

authentication : 입증, 증명, 인증 이런 의미다.

 

웹 사이트에는 여러가지 페이지가 있다.

어떤 페이지는 로그인된 유저만 이용이 가능하고

또 어떤 페이지는 로그인 상태가 아니더라도 이용이 가능하다.

 

페이지 때마다

- 로그인이 되어 있는지

- 관리자인지 일반 유저인지

 

글을 쓸때

- 권한 체크

 

middleware 폴더를 만든다.

auth.js 파일 만듬

const { User } = require("../models/User");

let auth = (req, res, next) => {
  //인증 처리
  //1. 클라이언트 쿠키에서 token을 가져온다.
  let token = req.cookies.x_auth;
  //2. 토큰을 복호화한 후 유저를 찾는다.
  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()//넥스트가 있어야 미드웨어에서 다음 콜백으로 넘어감 없으면 여기서 머뭄
  })
  //3. 유저가 있으면 인증 Okay
  //4. 유저가 없으면 인증 No
}

module.exports = { auth } //다른데에서도 사용 가능하게 만듬

 

User.js

userSchema.statics.findByToken = function(token, callback){ //복호화
 var user = this;
    //토큰을 decode 한다.

 jwt.verify(token, 'secretToken', function(err, decoded){
    //유저 아이디를 이용해서 유저를 찾은 다음
    //클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인

    user.findOne({"_id": decoded, "toekn": token}, function(err, user){
        if(err) return callback(err)
        cb(null, user)
    })
 })
}

 

index.js

const { auth } = require('./middleware/auth')

app.get('/api/users/auth', auth, (req, res) => { //auth 미드웨어 (req, res) 콜백하기전 작동
  //여기 까지 미들웨어를 통과해 왔다는  Authentication이 true 라는 말
  res.status(200).json({
    _id: req.user._id,
    isAdmin: req.user.role === 0 ? false : true, // 달라질 수 있는 부분 0이면 일반 유저 0이 아니면 관리자
    isAuth: true,
    email: req.user.email,
    name: req.user.name,
    lastname: req.user.lastname,
    role: req.user.role,
    image: req.user.image
  })
})

 

 

728x90

'공부 > nodejs' 카테고리의 다른 글

로그아웃  (0) 2021.06.14
로그인  (0) 2021.06.13
비밀번호 암호화 하기 Bcrypt  (0) 2021.06.13
비밀 설정 정보 관리  (0) 2021.06.13
nodemon  (0) 2021.06.12

댓글