-
[auth - middleware]React/프로젝트 2022. 1. 24. 17:02
middleware
endpoint의 req받은 다음, cb function하기 전 중간에서 작업을 처리하는 곳Auth route
- 페이지 이동 때마다 로그인 여부와 관리자 유저인지 등 체크
- 글을 쓸 때나 지울 때 같은 권한이 있는지 체크
Auth route 만드는 방법
※ 현재 token은
서버에서는 user DB에 넣었고
클라이언트에서는 쿠키에 넣었다.
- 쿠키(client)에 저장된 토큰을 서버에 가져와서 복호화 한다.
- User.findByToken
- 복호화(토큰 디코드)를 통해 User ID추출
- jwt.verify
- 서버에 있는 token 인증 완료가 되면
해당 유저 정보를 선별해 프론트 엔드로 보내준다.
// users.js const { auth } = require("../middleware/auth"); router.get("/auth", auth, (req,res) => { // auth middleware 이동 res.statue(200).json({ _id: req.user._id, isAdmin: req.user.role === 0 ? false : true, isAuth: true, email: req.user.email, firstname: req.user.firstname, lastname: req.user.lastname, role: req.user.role, image: req.user.image }); });// auth.js const { User } = require("../models/User"); let auth = (req, res, next) => { // 쿠키에서 token가져온다. let token = req.cookies.x_auth; // cookieParser이용 User.findByToken(token, (err, user) => { // User model에서 처리 if(err) throw err; if(!user) return res.json({ isAuth: false, error: true }); req.token = token; // token 정보 저장 req.user = user; // user 정보 저장 next(); }); }; module.exports = { auth };// User.js models > User.js userSchema.statics.findByToken = function(token, cb) { var user = this; // 복호화 과정 // 쿠키에서 가져온 토큰을 decode한다.(secretToken 이용) jwt.verify(token, "secretToken", function(err, decode) { // decode : userID user.findOne({ _id: decode, token: token}, function (err, user) { // client에서 가져온 토큰과 DB에 보관된 토큰이 일치하는지 확인 if(err) return cb(err); cb(null, user); // 오류가 없다면(null), user정보 전달 }); }); };JWT 디코딩
참고 : https://backend-intro.vlpt.us/4/03.html// jwt 디코딩 jwt.verify(token, jwtSecret, (error, decoded) => { if(error) { console.error(error); return; } console.log(decoded); });
'React > 프로젝트' 카테고리의 다른 글
[npm vs npx] (0) 2022.01.24 [리액트] (0) 2022.01.24 [로그인] (0) 2022.01.24 [Bcrypt] - 비밀번호 암호화 (0) 2022.01.21 [Nodemon] (0) 2022.01.21