JS/Node.js

[NodeJS] 토큰 인식 실패 에러_Cannot read property 'x_auth' of undefined

kth990303 2021. 7. 19. 17:50
반응형

인프런에서 로그인/로그아웃 기능을 구현하는 강의를 듣던 도중

위와 같은 에러가 발생했다.

 

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

 

[/api/users/logout] 에러 질문: Cannot read property 'x_auth' of undefined - 인프런 | 질문 & 답변

안녕하세요 logout 기능을 구현했는데 아래 에러가 떠서 너무 힘들어서 질문드립니다. postman으로 POST 메소드로 login에 성공하였고, 토큰이 생기는것을 확인했습니다. 그 후 바로 postman으로 GET 메소

www.inflearn.com


문제상황

인증 미들웨어 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());

도움된 포스팅

https://berkbach.com/node-js-%EC%99%80-cookie-session%EC%9C%BC%EB%A1%9C-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%A0%95%EB%B3%B4-%EC%A0%80%EC%9E%A5-part-1-b66d8b35a6e6

 

Node.js 와 Cookie/Session으로 사용자 정보 저장 - Part 1

Cookie는 사용자의 정보가 웹 서버를 통해 사용자의 컴퓨터에 직접 저장되는 정보의 단위를 말합니다.

berkbach.com


로그인하여 토큰이 생성됐던 test3 계정을 GET 메소드로 로그아웃하여

토큰을 성공적으로 ""로 초기화시켜 사라지게 했음을 확인할 수 있다.

반응형