처음하는개발
329
2021-05-23 20:38:18
6
353

nodejs 로그인세션구현 질문이요 ㅠㅠ


현재 데이터베이스에있는 아이디로 로그인까지는 구현됐는데 로그인을 했으면 세션을 유지하고로그아웃시 세션을 지우고 싶은데요 세션쓰기위해서 app.js에서 const session = require('express-session');해주고 npm i express-session해주었습니다. 근데 제생각으로는 login.js에서 로그인할때 세션을주고 로그아웃시 세션을뺏으면될꺼같은데 디테일하게 코딩을 못하겠네요..

ㅠㅠ 사진은 제 login.js코드와 폴더구조입니다

.


0
  • 답변 6

  • 안녕디지몬
    218
    2021-05-23 22:09:28

    그럴때는 코딩하는 것을 멈추고 펜을 들어보세요


    그리고는 노트에다가 하나 씩 적어봅니다.


    // 로그인

    const { id, passwrod } = req.body;


    const encryptedPassword = cryript(password);


    // 유저가 있는지 확인

    const user = await query("select * from user where id = "id" and password = "encryptedPassword");


    // 유저가 없으면

    if (!user) {

      res.sendStatus(404);

      return;

    }


    // 유저가 있으면 

    req.session.user = {

      ...user,

      // Add some anything

    }


    res.status(200).send(user);


    // 로그아웃


    req.session.destroy(function(err) => {

      if (err) {

        console.log(err)

        next(err);

        return;

      }

    })


    이런식으로 하지 않을까 싶습니다~


      


  • 처음하는개발
    329
    2021-05-23 22:23:42

    답변감사합니다 하지만 제가아직초보라 아직이해가 안가는부분이있어서 질문드립니다..

    req.session.user={} 이부분이 자꾸 에러가나는데 user부분을 undefined합니다.

    로그인성공했을시 console.log(req.session)을 했을시도 undefined를 하는데 세션자체가 안되는거같은데 뭘 실수한건지 모르겠습니다 ㅠㅠ

  • 안녕디지몬
    218
    2021-05-23 22:28:49

    console.log 를 이용하면 왜 그런지 알 수 있습니다.

    console.log(req.session.user) // undefined 

    console.log(req.session) // session object


    위에 문제를 해결하기 위해선 여러 방법이 있지만 

    Object.assign(req.session, { user: { ...user } }); 이런식으로 해결 할수 있습니다.


  • 처음하는개발
    329
    2021-05-23 22:34:07


    console.log(req.session);

    했을시 undefined가 뜨고


    console.log(req.session.userId);

    했을시 

    TypeError: Cannot read property 'userId' of undefined

    아예 에러가뜹니다.ㅠㅠ


  • 안녕디지몬
    218
    2021-05-23 22:52:58

    그렇다면 애초에 session 관련 설정이 잘못된것입니다.


    https://www.npmjs.com/package/express-session


    여기 읽어보시고 app.js 혹은 index.js에서 미들웨어 설정 잘해주시면 해결될거 같습니다!



  • 처음하는개발
    329
    2021-05-23 23:01:28
    제가 app.js에서 세션및 라우터를 연결하고 login.js에서는 서비스를 처리하는데 그렇다면 login.js에서 따로 세션처리를해줘야하나요 아니면 app.js에서만 처리해도되는건가요..?ㅠㅠ
  • 로그인을 하시면 답변을 등록할 수 있습니다.