inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

쿠키/세션과 전체 로그인 흐름.

로그인시 500 오류 발생하는데 이유를 모르겠습니다 ㅠㅠ

805

이승주

작성한 질문수 4

0

안녕하세요~ 강의 열심히듣고 있다가 ㅠ 막혀서 진도를 나가지 못하고 있습니다.
회원가입하고 디비에 제대로 쌓인거 확인 후 해당 아이디로 로그인 하려하니 다음과 같은 오류들이 확인되고 로그인이 되지 않습니다. 강의를 여러번 돌려도 확인이 어렵네요 ㅠ 도움 부탁 드립니다.

redux nodejs react express Next.js

답변 3

0

제로초(조현영)

app.js에서 라우터들을 익스프레스 세션보다 아래 두셔야 합니다.

0

이승주

아 순서도 중요하군요~ 감사합니다~

0

제로초(조현영)

네 위에서부터 순서대로 실행돼서 미들웨어들이 연결된 후에 라우터가 실행돼야 합니다.

0

이승주

<routes/user.js>

const express = require("express");
const { User } = require("../models");
const router = express.Router();
const bcrypt = require("bcrypt");
const passport = require("passport");

//전략실행, 미들웨어 확정 authenticate가 (req, res, next)  를 쓸수 있게
// router.post("/login", isNotLoggedIn, (req, res, next) => {
router.post("/login", (req, res, next) => {
  passport.authenticate("local", (err, user, info) => {
    if (err) {
      console.error(err);
      //서버 에러
      return next(err);
    }
    if (info) {
      //info가 있다는건 client 에러가 있다는거, 클라이언트로 응답 보내주는거
      // 401: 미인증
      return res.status(401).send(info.reason);
    }
    return req.login(user, async (loginErr) => {
      // passport/nde.js 안 serializeUsert실행
      //서비스 로그인 에러가 아니라 passport로그인 에러, 잘 발생하지 않음
      if (loginErr) {
        console.error(loginErr);
        return next(loginErr);
      }

      //사용자 정보를 프론트로 넘기기
      return res.status(200).json(user);
    });
  })(req, res, next);
});

router.post("/", async (req, res, next) => {
  //POST/user/
  //뒤에 숫자는 암호의 난이도
  const hashedPassword = await bcrypt.hash(req.body.password, 12);
  //생략 됏지만 실제로는  /POST/user
  // await를 안쓰면 비동기가 되서 res.send()이 먼저 실행 될수 있음
  try {
    // findOne디비 안 중복 데이터 찾는 함수_시퀄라이즈
    const exUser = await User.findOne({
      where: {
        email: req.body.email,
      },
    });
    if (exUser) {
      // return을 써서 라우터 종료
      return res.status(403).send("이미 사용 중인 아이디입니다.");
    }

    await User.create({
      email: req.body.email,
      nickname: req.body.nickname,
      password: hashedPassword,
    });
    res.status(201).send("ok");
  } catch (error) {
    console.error(error);
    next(error); // status 500
  }
  res.send("ok");
});

 
module.exports = router;

0

이승주

<app.js>


 
const express = require("express");
const postRouter = require("./routes/post");
const userRouter = require("./routes/user");
const db = require("./models");
const cors = require("cors");
const passportConfig = require("./passport");
const session = require("express-session");
const cookieParser = require("cookie-parser");
const passport = require("passport");
const dotenv = require("dotenv");

dotenv.config();
const app = express();

db.sequelize
  .sync()
  .then(() => {
    console.log("db연결 성공!");
  })
  .catch(console.error);

passportConfig();

//프론트에서 넘어온 데이터를 해석해서 라우터의 양식(req body)에 넘겨준다
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

 
app.get("/", (req, res) => {
  res.send("hello express");
});

app.get("/api", (req, res) => {
  res.send("hello express/api");
});

// get: 가져오는거 , post: 생성하다 요청 데이터 처리 메시지 바디를 통해 서버로 요청 데이터 전달, delete: 지우기, put:전체수정하다,patch:전체 수정
app.get("/api/posts", (req, res) => {
  res.json([
    { id: 1, content: "hello" },
    { id: 2, content: "hello2" },
    { id: 3, content: "hello3" },
  ]);
});

 
 
app.use(
  cors({
    origin: "*",
    credentials: false,
  })
);
app.use("/post", postRouter);
app.use("/user", userRouter);

app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(
  session({
    saveUninitialized: false,
    resave: false,
    secret: process.env.COOKIE_SECRET,
    // cookie: {
    //   httpOnly: true,
    //   secure: false,
    //   domain: process.env.NODE_ENV === "production" && ".nodebird.com",
    // },
  })
);
app.use(passport.initialize());
app.use(passport.session());

app.listen(3065, () => {
  console.log("백엔드 서버 실행 중");
});

넥스트 버젼 질문

0

90

2

로그인시 401 Unauthorized 오류가 뜹니다

0

104

1

무한 스크롤 중 스크롤 튐 현상

0

192

1

특정 페이지 접근을 막고 싶을 때

0

116

2

createGlobalStyle의 위치와 영향범위

0

102

2

인라인 스타일 리렌더링 관련

0

98

2

vsc 에서 npm init 설치시 오류

0

157

2

nextjs 15버전 사용 가능할까요?

0

166

1

화면 새로고침 문의

0

129

1

RTK에서 draft, state 차이가 있나요?

0

160

2

Next 14 사용해도 될까요?

0

455

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

359

1

url 오류 질문있습니다

0

217

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

391

1

sudo certbot --nginx 에러

0

1293

2

Minified React error 콘솔에러 (hydrate)

0

478

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

255

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

338

1

npm run build 에러

0

525

1

front 서버 npm run build 중에 발생한 에러들

0

399

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

350

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

290

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

249

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

206

1