반응형
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 |
댓글