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

Moa Kim님의 프로필 이미지

작성한 질문수

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

배포 후 모바일에서 로그인 안되는 문제.

작성

·

587

0

업로드해주신 리액트쿼리 버전을 기반으로 연습 프로젝트를 만들었습니다.

PC버전에서는 로그인이 잘 되고 기능들도 이미지 업로드 부분을 제외하곤 잘 되고 있습니다.

문제는 모바일에서 로그인이 안되네요. 크롬/삼성브라우저 동일합니다.

휴대폰 USB로 연결해서 개발자모드에서 나타난 에러는 이렇고요

SSH 백서버는 아무런 반응이 없습니다.

CORS문제인것 같긴한데 몇시간째 삽질중인데 갈피를 못잡겠네요.

 

그 외에 테이블이 대문자시작으로 생성됐는데

DROP 하고 다시 실행했지만 여전히 대문자로 시작하네요.

PC버전에선 아직 별 문제를 못찾았긴 했는데  로컬에서처럼 정상적으로 테이블 생성하는 다른 방법이 있나요?

 

app.js 코드는 이렇습니다.

 

const express = require('express');
const cors = require('cors');
const morgan = require('morgan'); // front에서 보내는 요청 console 해주는 툴
const dotenv = require('dotenv'); // 환경설정 정보 저장
const hpp = require('hpp');
const helmet = require('helmet');

const passport = require('passport');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const path = require('path'); // 파일이름 관련

const db = require('./models');
const passportConfig = require('./passport');

const userRouter = require('./routes/user');
const itemRouter = require('./routes/item');
const orderRouter = require('./routes/order');
const postRouter = require('./routes/post');

dotenv.config();
const app = express();
// db.sequelize.sync({ alter: true }) // 테이블 수정 가능 설정
db.sequelize.sync({ logging: false })
  .then(() => {
    console.log('db 연결 성공');
  })
  .catch(console.error);
passportConfig();
if (process.env.NODE_ENV === 'production') { //배포모드일 떄
  console.log('production 배포모드');
  app.use(morgan('combiend'));
  app.use(hpp());
  app.use(helmet({ contentSecurityPolicy: false }));
  app.use(cors({
    origin: ['http://localhost:3060', 'http://excusemoa.com'],
    credentials: true,
  }));
  // npm i pm2 cross-env helmet hpp
} else {
  console.log('dev 개발모드');
  app.use(morgan('dev'));
  app.use(cors({
    origin: true,
    credentials:  true,
  }));
}

app.use('/', express.static(path.join(__dirname, 'uploads')));
// front에서 이미지 폴더 접근 === '/back'(__dirname) + 'uploads'
app.use(express.json()); // req.body 파싱
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,
  cookie: { // 쿠키 공유를 위한 필수 옵션
    httpOnly: true,
    secure: false,
    domain: process.env.NODE_ENV === 'production' && '.excusemoa.com',
    // 백, 프론트 서버 IP 다르다면 쿠키공유 위해 도메인설정 필수
  },
}));
app.use(passport.initialize());
app.use(passport.session());

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

// 다른 라우터 불러오기
app.use('/user', userRouter);
app.use('/item', itemRouter);
app.use('/order', orderRouter);
app.use('/post', postRouter);

app.listen(80, () => {
    console.log('서버 실행 중');
});
 
 
프론트 config.ts
export const backUrl = process.env.NODE_ENV === 'production' ? 'http://api.excusemoa.com' : 'http://localhost:3070';

답변 2

0

Moa Kim님의 프로필 이미지
Moa Kim
질문자

지인에게 부탁해서 접속해봤는데 다른 폰 + 안드로이드 타블렛도 안되네요.

비밀번호 맞든 틀리든 excusemoa.com 내용: undefined라고 alert가 나오고

회원가입도 동작하지 않는것 보면(mysql에서 테이블 확인했는데 값 안들어오네요)

요청자체를 제대로 못보내거나 back에서 거부하고 있는것 같은데...

왜 모바일 브라우저에서만 그런건지 답답하면서 신기하네요

브라우저는 크롬, 삼성 이렇게 썼습니다. (둘다 크롬기반?) 아이폰이 없어서 사파리는 못써봤네요.

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

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

이것도 안뜨시나요?

Moa Kim님의 프로필 이미지
Moa Kim
질문자

 

넵 네트워크탭에선 status가 blocked:other 라고 나옵니다..

광고차단도 끄고, 와이파이/데이터 전환해서 해봤는데 같네요. 

 

Moa Kim님의 프로필 이미지
Moa Kim
질문자

안드로이드 9부터 axio http 요청이 막혀있다는 얘기가 있네요..

다른 우회방법을 찾든지 https로 변경해보겠습니다.

0

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

제가 모바일에서 excusemoa.com으로 지금 할 때는 서버에 요청이 잘 가는데요. 브라우저를 바꿔보세요. 혹시 로그인 실패 시에는 잘 가고, 성공 시에만 응답이 안 오는 건가요?

테이블 명은 model에서 tableName 옵션으로 지정해주시면 됩니다.

Moa Kim님의 프로필 이미지

작성한 질문수

질문하기