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

sungmin-choi님의 프로필 이미지

작성한 질문수

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

프론트 서버 배포하기

실제 배포한 ip에서는 쿠키가 생성이되지않고 passport중에deserializeUser호출이 안됩니다.

22.03.20 01:36 작성

·

491

0

안녕하세요 조현영 선생님 제가지금 해당 강의를 통해서 개인 프로젝트를 진행중인데 문제가 발생이 됬습니다.

클라이언트와 백엔드 다 우분트 환경에서 잘 작동해서 실제 배포한 ip주소로 들어가면 정상적으로 화면이 보여집니다.

 

클라이언트 서버:

 

다 작동이 잘 되고 회원가입 기능도 잘 작동해서 실제 해당http://13.125.96.64 쪽으로 요청을 하여 데이터베이스도 잘 생성이되고 됩니다.

근데 문제가 local로 성공적으로 로그인을하면 passport.js 쪽에서 serializeUser 한번 실행을하고

 

쿠키가 생겨야하는데 생기질 않습니다. 그리고 다시 메인 화면으로 돌아오면 LOAD_MY_INFO_REQUEST action으로 통해서 cookie 와 같이 서버로 전송을해서 deserializeUser도 실행이 되야하는데. deserializeUser도 실행이 안됩니다.

제 로컬에서는 모든게 다 잘 작동합니다.

 

로컬에서 프론트:

 

로그인 하면 잘 작동합니다.

 

로컬에서 백엔드 pm2 환경

보시면 쿠키도 잘 생성되고 passport.js 에서 deserializeUser 도 잘 작동되는게 보입니다.

 

하지만 배포한 ip에서는 쿠키도 생성이 되질않고 deserializeUser 도 작동하지 않습니다위 사진은 제가 로그인이 성공하고 다시 메인 페이지로 돌아온 화면입니다 성공적으로 로그인이 되도 쿠키는 여전히 생성되지 않았습니다.

위 사진은 제가 로그인이 성공하고 다시 메인 페이지로 돌아온 화면입니다 성공적으로 로그인이 되도 쿠키는 여전히 생성되지 않았습니다.

백엔드쪽 봐도serializeUser 으로 로그인이 성공하고 deserializeUser는 호출이 되질 않습니다.

 

 

back/app.js 소스코드입니다.

 

const express = require('express');
const PORT = 80;
const app = express();
const cors = require('cors');
const effectRouter = require('./routers/effect');
const userRouter = require('./routers/user');
const effectsRouter = require('./routers/effects');
const db = require('./models');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const dotenv = require('dotenv');
const passport = require('passport');
const passportConfig = require('./passport');
const morgan = require('morgan');
const hpp = require('hpp');
const helmet = require('helmet');
db.sequelize
.sync()
.then(() => {
    console.log('db 연결 성공');
  })
  .catch(console.error);

passportConfig();

dotenv.config();

app.use(cookieParser(process.env.EFFECTSHOP_SECRET));
app.use(
  session({
    saveUninitialized: false,
    resave: false,
    secret:process.env.EFFECTSHOP_SECRET,

  })
)
if(process.env.NODE_ENV === 'production'){
  app.use(morgan('combined'));
  app.use(hpp()); //보안에 도움되는 라이브러리
  app.use(helmet());
}else{
  app.use(morgan('dev'));
}


app.use(passport.initialize()); // 패스포트 설정 미들웨어에 추가.
app.use(passport.session());

app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(cors({
  origin:["http://localhost:3000","http://54.180.81.148"],
  credentials:true,
}));
app.get('/',(req,res)=>{
  res.send('hello express');
})
app.use('/effects' ,effectsRouter);
app.use('/effect',effectRouter);
app.use('/user', userRouter);

app.listen(PORT, ()=>{
    console.log(`server on! at http://localhost:${PORT}`);
});

 

 

더 자세한 코드를 보시길 원하신다면

여기에 제 소스코드를 올려 놓았습니다 ㅠㅠ 엄청난 고민끝에 여쭤봅니다 ㅜ 감사합니다.

https://github.com/sungmin-choi/effectShopByHTML-CSS

답변 2

1

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

2022. 03. 20. 01:42

ip면 로그인이 안 되실 겁니다. 같은 도메인을 적용하셔야 쿠키가 서로 공유됩니다.

sungmin-choi님의 프로필 이미지
sungmin-choi
질문자

2022. 03. 20. 11:43

아 도메인작업까지 해야 쿠키가 공유가 된다는 말씀이신거죠?

 

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

2022. 03. 20. 12:10

네 그리고 도메인이 같아야합니다.

0

sungmin-choi님의 프로필 이미지
sungmin-choi
질문자

2022. 03. 20. 14:58

다음강의에 바로 설명 해 주시는군요... 감사합니다 그래도 값진 경험이였습니다 감사합니다