인프런 커뮤니티 질문&답변
로그인시 500 오류 발생하는데 이유를 모르겠습니다 ㅠㅠ
작성
·
779
답변 3
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("백엔드 서버 실행 중");
});









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