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

jihwoon park님의 프로필 이미지

작성한 질문수

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

새로고침 로그인 풀림-쿠키 공유 문제

해결된 질문

작성

·

1.4K

0

안녕하세요, 강사님!

AWS로 서버를 옮겨서 서버를 실행하면 로그인 풀림 현상이 계속됩니다.  EC2 백서버에서 samesite="none" secure:true를 적용을 해줬고, domain도 지정했고, nginx로 https 설정을 했는데도 여전히 새로고침을 하면 로그인이 풀립니다. application탭에 쿠키도 보이지 않습니다. 제 코드에 문제가 있는 거 같아서 제로초 강사님 코드를 다운받아서 AWS EC2에 설치를 하고  .env와 url을 수정하여 서버를 실행해도 동일하게 로그인 풀림 현상이 지속되고 있습니다. 어떻게 문제를 해결할 수 있을까요?

back서버 > app.js

if (process.env.NODE_ENV === 'production') {
  app.enable('trust proxy');
  app.use(morgan('combined'));
  app.use(hpp());
  app.use(helmet({ contentSecurityPolicy: false }));
  app.use(cors({
    origin: 'https://aserang.com',
    credentials: true,
  }));
else {
  app.use(morgan('dev'));
  app.use(cors({
    origin: true,
    credentials: true,
  }));
}
app.use('/'express.static(path.join(__dirname'uploads')));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
  saveUninitialized: false,
  resave: false,
  secret: process.env.COOKIE_SECRET,
  proxy: process.env.NODE_ENV === 'production',
  cookie: {
    httpOnly: true,
    secure: process.env.NODE_ENV === 'production',
    domain: process.env.NODE_ENV === 'production' && '.aserang.com'
  },
}));
app.use(passport.initialize());
app.use(passport.session());

front 서버 > config.js

export const backUrl = process.env.NODE_ENV === 'production' ? 'https://api.aserang.com' : 'http://localhost:3065';

chrome 개발자도구 Network창

답변 2

0

jihwoon park님의 프로필 이미지
jihwoon park
질문자

front > package.json

"scripts": {
    "dev""next -p 3060",
    "build""cross-env ANALYZE=true NODE_ENV=production next build",
    "start""cross-env NODE_ENV=production next start -p 3060"
 },

back > package.json

"scripts": {
    "dev""nodemon app",
    "start""cross-env NODE_ENV=production pm2 start app.js"
 },

강사님 코드 package.json에 있는거 그대로 사용했고, EC2에서 실행할때도 동영상에서 알려주신대로 root 권한으로 실행을 했습니다. 

front > npx pm2 start npm -- start

back > npm start

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

로그인의 response header에 set-cookie가 있어야 하는데 없는걸로 보아서는 cookie 문제이긴 합니다. /user/login의 response에 로그인한 사용자의 정보는 들어있나요?

jihwoon park님의 프로필 이미지
jihwoon park
질문자

/user/login의 response에 로그인한 사용자의 정보 => 가 Request Payload를 의미하는 건가요? Request Payload에 정보는 들어가 있고, back서버 mysql db에도 저장이 잘 됩니다.

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

아뇨 headers 탭 오른쪽 preview 탭에 로그인한 사용자가 들어가는지 여쭤본거고요. db에 저장된 것은 회원가입이라서 이 경우와는 크게 상관이 없습니다.

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

아 근데 sameSite: none 하셨다 했는데 이것도 적용되어 있나요?

jihwoon park님의 프로필 이미지
jihwoon park
질문자

 사용자 정보가 들어있습니다. 그리고 sameSite:none은 넣지 않았습니다. 강사님 코드를 그대로 다운받아서 실행을 했습니다.

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

 nginx 설정 문제로 보입니다. proxy하면서 proxy관련 헤더 설정을 넣어주셨나요? location 내부

jihwoon park님의 프로필 이미지
jihwoon park
질문자

nginx 설정입니다

front > /etc/nginx/nginx.conf

back > /etc/nginx/nginx.conf

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

설정을

https://www.zerocho.com/category/NodeJS/post/5ef450a5701d8a001f84baeb

참고해서 $scheme 같은 부분 더 추가해보세요.

jihwoon park님의 프로필 이미지
jihwoon park
질문자

링크걸어주신 사이트에서 적은대로  niginx 설정을 수정했더니 쿠키 공유가 되었습니다. 감사합니다.

0

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

실행하실 때 NODE_ENV=production 이거 넣어서 실행하셨나요?