• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 [채팅기능 만들기 4] 소켓내부에서 현재 유저의 _id 아는법

[채팅기능 만들기 4] 소켓내부에서 현재 유저의 _id 아는법

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #124215

    Lincoln Oh
    참가자
    안녕하시오 사과선생
    채팅기능을 구현 중, 현재 접속한 사람의 _id를 찾기 위해서 고생중입니다
    
    이전까지의 강의에서 passport를 활용해 api 요청할때마다 요청.user._id 써서 간단하게 찾아냈었는데
    웹소켓은 이와는 다르게 "요청"을 사용하지 않는 방식때문에 현재 로그인된 사람의 정보를 찾아내는데 어려움을 겪고있어요
    
    강의에선 socket.request.session에 유저 정보가 들어있다고했지만, console.log로 socket.request.session.id를 출력해보면
    웹소켓이 연결될때마다 항상 새로운 id가 발급되고, 무엇보다 이는 유저의 _id와 일치하지 않습니다.
    
    강의내용에 socket.request.session.passport.user.id 가 있어서 사용해봤는데
                                                            ^
    전에 같은 내용의 질문을 하신분처럼 저도 Cannot read properties of undefined(reading 'user') 에러가 뜨더군요
    
    여태껏 모든 강의를 들어오면서 대부분의 기능들은 전부 구현이 가능했습니다만 여기서 막혔습니다
    부디 도움을 주길 바랍니다 선생..
    • 이 게시글은 Lincoln Oh에 의해 1 년, 1 월 전에 수정됐습니다.
    • 이 게시글은 Lincoln Oh에 의해 1 년, 1 월 전에 수정됐습니다.
    #124234

    codingapple
    키 마스터
    https://socket.io/how-to/use-with-express-session 이런거 따라해야 유저정보가 들어있습니다
    #124241

    Lincoln Oh
    참가자
    추천해주신 사이트에선 passport와 연동하는부분을 찾을 수 없어 찾아헤매다 이곳에서 방법을 찾았습니다
    https://github.com/socketio/socket.io/blob/master/examples/passport-example/index.js#L76-L80//
    아직 해결방법이 공유되지 않은것같아 이곳에 남깁니다
    sessionMiddleware 정의를 passport = require('passport') 보다 아래에 위치시키고,
    바로 밑에 app.use(sessionMiddleware) 정의 후
    app.use(passport.initialize()) 와
    app.use(passport.session()) 를 위치, 그 다음엔 로그인을 위한 passport 정의와 serialize, deserialize를 하고
     
    io 소켓부분 전에 먼저
    const io = new Server(server) // 이 io 정의부분은 강의내용 복붙부분에 있음
    
    그다음 wrap을 진행합니다
    const wrap = middleware => (socket, next) => middleware(socket.request, {}, next)
    io.use(wrap(sessionMiddleware))
    io.use(wrap(passport.initialize()))
    io.use(wrap(passport.session()))
    
    이후에 io.on('connection', (socket) => {
    ...
    }
    이렇게 해줘야 socket.request.user._id를 사용할 수 있더군요..
    
    
    
    
    
    
    
    • 이 답변은 Lincoln Oh에 의해 1 년, 1 월 전에 수정됐습니다.
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠