1. Auth
1) Auth : 인증, 권한부여 등의 줄임말로 인증은 자신이 누구라고 주장하는 사람을 확인하는 절차이며,
권한부여는 가고 싶은 곳으로 가도록 혹은 원하는 정보를 얻도록 허용하는 과정
=> Auth Route란 쉽게 말해 인증 기능을 구현하는 것
2) 페이지마다 로그인이 되어 있는지 안되어 있는지 확인하고, 페이지에 권한이 있는 관리자 유저인지 등을 체크하기 위해
Auth Route가 필요함
3) Auth Route 구현방법
=> 토큰을 만들면서 Client에는 Cookie, Server에는 DB에 저장을 해줬고,
서버와 클라이언트에 있는 두가지 토큰이 일치하는가를 계속적으로 체크해서 인증 권한을 확인해줌
2. Auth Route 구현
1) 구현 순서
=> Cookie에서 저장된 Token을 Server에서 가져와 복호화를 함
=> 복호화를 하면 UserID가 나오는데, 그 UserID를 이용하여 데이터베이스 User Collection에 있는지 확인함
=> 유저를 찾은 후 쿠키에서 받아온 Token을 유저도 갖고 있는지 확인함
2) Auth Route 생성
=> Get을 이용해서 Auth Route 코드 작성
엔드포인트와 (req, res) 중간에 있는 auth 미드웨어가 들어가며,
미드웨어는 엔드포인트에서 리퀘스트를 받은 후, 콜백함수를 실행하기 전에 중간에서 먼저 실행되는 것을 의미함
app.get('/api/users/auth', auth ,(req,res) => {
})
=> 미드웨어를 실행하기 위해 middleware폴더와 auth.js파일 만들기
=> auth.js 파일 안에 인증처리 코드 생성
let auth = (req, res, next) => {
//인증 처리를 하는 곳
// 1. Client Cookie에서 Token을 가져온다.
// 2. Token을 복호화 한 후 유저를 찾는다.
// 3. 유저가 있으면 인증 Okay
// 4. 유저가 없으면 인증 No!
}
module.exports = {auth};
=> let token = req.cookie.x_auth 부분은 Login Route에서 cookie에 저장해준 x_auth를 가져온 것
=> 가져온 Token으로 User를 찾기 위해 User 모델에 findByToken 함수 생성
=> 미드웨어 파일 코드
const {User} = require('../models/User');
let auth = (req, res, next) => {
//인증 처리를 하는 곳
// 1. Client Cookie에서 Token을 가져온다.
let token = req.cookies.x_auth;
// 2. Token을 복호화 한 후 유저를 찾는다.
User.findByToken(token, (err,user) =>{
if(err) throw err;
if(!user) return res.jsob({ isAuth: false, error: true})
req.token = token;
req.user = user;
next();
})
// 3. 유저가 있으면 인증 Okay
// 4. 유저가 없으면 인증 No!
}
module.exports = {auth};
=> 클라이언트에게 정보 전달
//role 1 어드민 role 2 특정 부서 어드민
//role 0 일반유저 role 0이 아니면 관리자
app.get('/api/users/auth', auth ,(req,res) => {
//여기까지 미들웨어를 통해왔다는 얘기는 Authentication 이 true 라는 의미
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
})
})
'Web > React Node js' 카테고리의 다른 글
리액트 기초 강의 (1) - 기본 개념 (0) | 2022.02.28 |
---|---|
노드 기초 강의 (11) - 로그아웃 기능 (0) | 2022.02.28 |
노드 기초 강의 (9) - 로그인 기능 with Bcrypt & 토큰 생성 with JSON WEBTOKEN (0) | 2022.02.27 |
노드 기초 강의 (8) - Bcrypt로 비밀번호 암호화 (0) | 2022.02.27 |
노드 기초 강의 (7) - 비밀 설정 정보 관리 (0) | 2022.02.27 |
댓글