반응형
인프런에서 로그인/로그아웃 기능을 구현하는 강의를 듣던 도중
위와 같은 에러가 발생했다.
TypeError: Cannot read property 'x_auth' of undefined at auth (C:\Users\User\Desktop\web_workspace\boiler_plate\middleware\auth.js:6:29) at Layer.handle [as handle_request] (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\express\lib\router\layer.js:95:5) at C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\express\lib\router\index.js:281:22 at Function.process_params (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\express\lib\router\index.js:335:12) at next (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\express\lib\router\index.js:275:10) at C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\body-parser\lib\read.js:130:5 at invokeCallback (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\raw-body\index.js:224:16) at done (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\raw-body\index.js:213:7) at IncomingMessage.onEnd (C:\Users\User\Desktop\web_workspace\boiler_plate\node_modules\raw-body\index.js:273:7) at IncomingMessage.emit (events.js:327:22) at endReadableNT (internal/streams/readable.js:1327:12) at processTicksAndRejections (internal/process/task_queues.js:80:21)
x_auth는 로그인할 때 쿠키에 토큰을 부여해줄 때 붙여준 토큰 이름이다.
아래에서 내 질문글 링크를 볼 수 있다.
https://www.inflearn.com/questions/259511
문제상황
인증 미들웨어 auth.js 코드 작성할 때 6번째 줄에서 토큰 이름인 x_auth를 인식하지 못하는 문제 발생
(6번째 줄: const token=req.cookies.x_auth;)
const { User } = require("../models/User");
const auth=(req, res, next)=>{
// 인증처리
// client cookie에서 토큰 가져오기
const token=req.cookies.x_auth;
// token을 jwt로 decoding
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();
})
}
module.exports={auth};
해결 방법
app.use(cookieParser());를 추가하지 않았다.
cookieParser 미들웨어 사용을 위해 index.js에 app.use(cookieParser());를 넣어주자.
또한, 공부해보니 클라이언트가 현재 쿠키를 가지고 있는지 확인하는 방법은
req.cookies.[cookie-name]으로 확인할 수 있다고 한다.
이걸 인식을 못한 것이므로 cookieParser에 문제가 생겼음을 확인할 수도 있을 듯하다.
app.use(express.urlencoded({
extended:true
}));
app.use(express.json());
// 추가한 부분
app.use(cookieParser());
도움된 포스팅
로그인하여 토큰이 생성됐던 test3 계정을 GET 메소드로 로그아웃하여
토큰을 성공적으로 ""로 초기화시켜 사라지게 했음을 확인할 수 있다.
반응형
'JS > Node.js' 카테고리의 다른 글
[MongoDB] Error Code: E11000 _ key 값이 중복될 때 (0) | 2021.07.25 |
---|---|
[NodeJS] MongoDB를 이용한 로그인 구현 및 토큰 생성 (0) | 2021.06.21 |
[NodeJS] BCrypt로 비밀번호 암호화하기 (0) | 2021.06.20 |
[NodeJS] Postman을 이용하여 회원가입 API 테스트해보기 (0) | 2021.06.19 |
[MongoDB] 몽고디비 계정 설정과 Mongoose 설치 (0) | 2021.06.14 |