인프런 커뮤니티 질문&답변

낙서님의 프로필 이미지
낙서

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

회원가입까지 잘 되는데, 로그인이 안됩니다.

작성

·

379

0

안녕하세요 제로초님.

매번 질문만 남겨드려 죄송합니다.

매 작업마다 console을 찍어서 에러를 잡아내려고 하곤 있는데 회원가입에서도 문제가 없음에도 로그인이 이루어지지 않습니다.

// routes/user.js

const express = require("express");
const bcrypt = require("bcrypt");
const { User, Post } = require("../models"); // db 내에서 User 테이블을 가져온 것.
const passport = require("passport");

const router = express.Router();

router.post("/", async (req, res, next) => {
  // POST /user || next를 넣으면 발생한 에러를 한방에 브라우저로 모아준다.
  try {
    const exUser = await User.findOne({
      where: {
        email: req.body.email,
      },
    });

    if (exUser) {
      return res.status(403).send("이미 사용중인 아이디입니다.");
      // 여기서 보내는 res에 대한 send 메시지는 sagas/user.js의 signup 부분 err.response.data 가 된다!
    }

    const hashedPassword = await bcrypt.hash(req.body.password, 10);

    await User.create({
      //! User 테이블 내에 post, 즉 생성을 요청한다. 또한 async await을 사용함으로써 비동기처리를 해주고 순서대로 처리될 수 있도록 해준다.
      email: req.body.email,
      nickname: req.body.nickname,
      password: hashedPassword,
    });

    res.status(200).send("ok");
  } catch (error) {
    console.error(error);
    next(error); // status 500 -> 서버쪽 에러라는 뜻
  }
});

// POST /user/login
router.post("/login", (req, res, next) => {
  passport.authenticate("local", (err, user, info) => {
    if (err) {
      console.error(err);
      return next(err);
    }
    if (info) {
      return res.status(401).send(info.reason);
    }
    return req.login(user, async (loginErr) => {
      if (loginErr) {
        console.error(loginErr);
        return next(loginErr);
      }
      const fullUserWithoutPassword = await User.findOne({
        where: { id: user.id },
        attributes: {
          exclude: ["password"],
        },
        include: [{
          model: Post,
        }, {
          model: User,
          as: "Followings",
        }, {
          model: User,
          as: "Followers",
        }
        ],
      });
      return res.status(200).json(fullUserWithoutPassword);
    });
  })(req, res, next);
});

router.post("/logout", (req, res) => {
  req.logout();
  req.session.destroy();
  req.send("ok");
});

module.exports = router;

스크린샷 2022-09-13 오후 8.31.45.png

스크린샷 2022-09-13 오후 8.31.58.png

스크린샷 2022-09-13 오후 8.32.18.png스크린샷 2022-09-13 오후 8.33.17.png

스크린샷 2022-09-13 오후 8.36.52.png

db에도 문제가 없는 듯 한데.. 도대체 무엇을 놓치고 있는 것일까요..?

답변 2

0

낙서님의 프로필 이미지
낙서
질문자

빠르고 명쾌한 답변 감사합니다!

한방에 해결됐네요..

혹시 해당 에러 코드에서 db가 제대로 만들어지지 않았을 거라는 결론은 어떻게 도출해낼 수 있을까요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

UserId 컬럼이 없다고 에러 메시지에 되어 있어서 알았습니다.

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

db가 제대로 안 만들어진 것입니다. 테이블을 지웠다가 다시 서버를 켜서 만들어보세요.

낙서님의 프로필 이미지
낙서

작성한 질문수

질문하기