묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
[/api/users/logout] 에러 질문: Cannot read property 'x_auth' of undefined
안녕하세요 logout 기능을 구현했는데 아래 에러가 떠서 너무 힘들어서 질문드립니다. postman으로 POST 메소드로 login에 성공하였고, 토큰이 생기는것을 확인했습니다. 그 후 바로 postman으로 GET 메소드로 /api/users/logout을 하려 하는데 아래와 같은 에러가 발생하네요 ㅠㅠ 제 깃헙 주소에서 전체코드를 보실 수 있습니다. https://github.com/kth990303/boiler-plate-prac 어디가 문제인지 잘 모르겠네요. 답변 부탁드립니다 ㅜㅜ 감사합니다. 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) 코드는 아래와 같습니다. Auth.js (auth.js:6:29는 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}; User.js (Token 생성, findByToken function 부분) userSchema.methods.generateToken=function(cb){ const user=this; const token=jwt.sign(user._id.toHexString(), 'secretToken'); user.token=token; user.save(function(err, user){ if(err) return cb(err); cb(null, user); }); } userSchema.statics.findByToken=function(token, cb){ const user=this; jwt.verify(token, 'secretToken', function(err, decoded){ user.findOne({"_id": decoded, "token": token}, function(err, user){ if(err) return cb(err); cb(null, user); }); }); } const User=mongoose.model('User', userSchema); // 다른 파일에서도 이 모델을 쓸 수 있도록 module.exports={ User } Index.js (/api/users/login, /api/users/auth, /api/users/logout) app.post('/api/users/login', (req, res)=>{ // 요청된 이메일을 db에서 찾는다. User.findOne({email: req.body.email}, (err, user)=>{ if(!user){ return res.json({ loginSuccess: false, message: "Unvalid email" }); } // 요청된 이메일이 db에 있다면 비밀번호 일치여부 확인 user.comparePassword(req.body.password, (err, isMatch)=>{ if(!isMatch) return res.json({ loginSuccess:false, message:"Wrong password" }); // 일치 시, 토큰 생성 user.generateToken((err, user)=>{ if(err) return res.status(400).send(err); // 토큰을 쿠키에 저장 res.cookie("x_auth", user.token) .status(200) .json({ loginSuccess: true, userId: user._id }); }); }); }); }); // auth라는 미들웨어를 추가 // request를 받으면 call back function 호출 전에 middleware실행 app.get('/api/users/auth', auth, (req, res)=>{ 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 }); }); app.get('/api/users/logout', auth, (req, res)=>{ console.log(req.user); user.findOneAndUpdate({_id:req.user._id}, { token: "" }, (err, user)=>{ if(err) return res.json({ success: false, err }); return res.status(200).send({ success: true }) }) }) 아래는 postman 화면 결과입니다. +) 전체적으로 수업시간의 코드는 이해가 되는데, 어떤 의식의 흐름으로 이렇게 작성하는지 신기할 때가 많습니다. 예를 들면 쿠키에서 토큰을 가져온다 할 때 let token=req.cookies.x_auth 에서 req에 cookies에서 쿠키 이름인 x_auth로 접근하면 바로 토큰이 나온다는 사실을 몰랐음. 이런 경우는 어떤 부분을 공부해야 할까요? 전체적으로 자바스크립트 실력이 붕 뜬 느낌입니다. (초보자라 질문이 좀 이상한 것 같기도 하네요...)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
생성자를 사용안하고..
생성자를 사용하지 않고, 그냥 선언만 해서 사용해도 되는건가요? @autowired priavte MemeberService memberservice ; public void Join(){ memberservice.join(); }
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [통합편]
전자책 관련 질문
정말 정성스러운 강의 감사합니다. 전자책으로도 같은 내용의 작년판이 있던데 이 버전은 인강 버전과 내용이 많이 다른가요? 다름이 아니라, 인강은 좋지만 너무 길어서 추후에 한 번씩 생각날 때 다시 빠르게 훑어보고 싶지만 그것이 불가능하여 전자책으로 빠르게 훑어볼 수 있으면 좋겠다 싶었습니다. 근데, 이미 쓰신게 있더라고요. 그래서 내용차이가 심하지 않다면 그 전자책도 구매해서 필요할 때 빠르게 보면 좋겠다 싶어 질문드립니다.
-
미해결홍정모의 따라하며 배우는 C언어
이스케이프 언어 \b 질문입니다.
\b를 사용할때 printf("ABCDF\b\b\b\b\b")이런식으로 입력하면 처음의 A만 삭제가 되는데 printf("ABC\b\bDEF")이런식으로 사용하면 BC가 둘다 사라집니다 왜 이런현상이 발생하는ㄱ ㅓㄴ가요?
-
미해결[초급] 40분만에 훑어보는 Sass
4:21 css
강의 4:21 분 영상에 컴파일된 css 내용중 아래와 같이 되는게 맞는거아닌지요? .phoster span {} 이 오타인거같습니다. //scss .phoster-span { @extend %box-frame; span { display: inline-block; border-top: 2px solid #bb6bd9; padding: 16px 0 17px; text-align: center; } } //css .phoster-span span { display: inline-block; border-top: 2px solid #bb6bd9; padding: 16px 0 17px; text-align: center; }
-
미해결[라즈베리파이] IoT 딥러닝 Computer Vision 실전 프로젝트
no module named 'cv2'
안녕하세요 코드 실행을 눌렀는데 cv2가 없다는 메세지가 뜹니다 ㅠ 인터넷에 검색해봤는데 아나콘다에서 pip install opencv-python명령을 줘도 그대로입니다. 어떻게해야할까요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
db 하나 사용할때
Kafka Connector + DB 에서 메세지 큐잉 서비스를 사용하고 DB는 하나만 사용한다고 하셨는데 DB를 하나만 사용할 거면 메세지 큐잉 서비스가 필요한지에 대해서 궁금합니다.!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
이 강의만으로 게임 서버 직무의 C++ 관련 면접 대비는 어려울까요?
이 이상을 공부해야한다면 어떤 부분을 주로 해아할까요? 그리고 게임회사가 요구하는 C++ 프로그래밍 능력, 지식은 어떤 식으로 함양하는 것이 좋을까요?
-
해결됨AWS(Amazon Web Service) 중/상급자를 위한 강의
선생님 질문있습니다.
iam policy 듣다가 궁금점이 생겼습니다... 조언을 받고자 합니다 ! iam user(사용자)에서 s3를 만든 후 s3role이라는 역할을 만들었습니다. 이때 $ aws sts assume-role --role-arn "copy arn" --role-session-name "test session" 이라는 명령어로 role에 임시자격을 구했는데요 이때 얻은 accessKeyId, secretAccessKey, sessiontoken로 s3에 접근할 수 있었습니다. (저는 사진에서처럼 .env에 credentials를 적어주었습니다.) 그런데 1시간이 지나면 토큰이 만료되어 접근이 안되고 다시 credentials를 얻어줘야 하더라구요. 이때 credentials를 갱신해주려면 다시 명령어를 통해서 1시간마다 credentials를 얻은후 credentials를 바꿔주는 방법밖에 없나요? (혹은 1시간이 아닌 좀 더 길게 만료세션을 늘려주는 방법밖에 없나요?)
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
SPP Net 문의
Spatial Pyramid Pooling 까지만 강의가 있고 그 뒤에 SPP-NET 강의가 없는것 같습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
다른 강의 관련 질문을 드립니다.
현재 이 강좌를 수행하면서 문득 JPA도 병행해서 공부하고 싶은데요. 인프런에 있는 강의를 구매하면 책은 구매할 필요가 없는 지... 여쭙고 싶습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코딩채점 사이트에서 자꾸 컴파일에러가 나요
소스코드를 올릴때 어떤 규칙이 있나요?
-
해결됨팝스타 공식 뮤비 제작 & 유튜브 2천만 뷰 크리에이터의 애니메이트 X 이모티콘 클래스
스프라이트 시트 임포트
안녕하세요 선생님 스프라이트 시트 파일을 임포트 하고 싶은데요. 나름 검색을 해보니 픽셀 스프라이트 시트를 임포트 시키는 영상은 있는데요 ( https://youtu.be/R_3U-zZryik?t=159 ) 혹시 다른 방법이 있을까 싶어 선생님께 질문 드립니다. 아 그리고 위에 링크건 픽셀로 된 스프라이트 시트를 임포트 하는 영상에서 수정 -> 비트맵 -> 비트맵 추적 를 사용해서 배경을 날리던데요 이게 정확히 어떤 기능인지 궁금합니다. 색상 임계값 최소 영역 이런걸 조정해서 하니까 배경이 잘 날라가긴 하던데.. 색상이 저화질이 되더라구요 +_+;
-
미해결Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
책내용이 강좌에 어느 정도 포함되어 있나요?!
책내용이 강좌에 어느정도 포함되어 있나요?! 퍼센티지로 자세하게 말씀주시면 감사하겠습니다..
-
미해결쉽고 빠르게 익히는 Power BI (기본편)
Power BI 계정만들기 문의
Power Bi 계정만들기에서 조직계정이 필요한데, 저희 회사는 다음 메일만 사용하며 별도의 회사 메일이 없습니다. 이럴 경우 계정생성이 않되니 Power BI 서비스를 이용할 수 없는 건가요? 이렇게 되면 강의 듣고 실습해 보기가 어려운데...
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
feignErrorDecoder 질문
이 메소드로 들어가는 경우는 Feign으로 통신했을때 에러가 발생했을때 들어가는건가요?? (4xx, 5xx 번대 에러들??)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
컴퓨터 언어설정 질문
안녕하세요. getMessage("no_code", null, null)) 의 코드를 실행하면 messages_en.properties를 불러오더라구요. messages.properties를 불러와야 맞는것 같은데 말이죠. 이 부분이 컴퓨터 혹은 IDE 언어? 설정과 연관이 있을 수 있나요??
-
미해결머신러닝 엔지니어 실무
후반부 강의 자료 요청드립니다.
wo0909@naver.com
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
질문이 있습니다......
질문을 너무 자주하는 것같아 죄송합니다.... 근데 얜 왜 저한테 거짓말을 할까요......? 참고로 새로고침이나 껐다키기등은 여러번 해봤어요....
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
REST API로 백엔드와 프론트엔드가 분리되어 있을때
안녕하세요 강사님, 지금 강의를 들어보면 프론트와 백엔드가 스프링으로 연결되어 있을 때 서블릿 필터를 사용해서 controller에 등록된 URL만 로그인 체크가 되는 것 같습니다. 그런데 요즘은 Rest API로 서버와 view가 분리되어 있어서 react.js 같은 것을 사용하면 실제 URL은 controller에 있는 URL과 다를텐데 이런 경우에는 어떻게 하나요? 이런 경우에는 프론트엔드 프레임워크에서 필터 역할을 하는 로직을 넣는게 맞나요?