2014-03-28 6 views
2

내 문제 : 브라우저가 세션 쿠키 세트를 가져 오지 않습니다. 이로 인해 서버에 대한 모든 요청이 서로 연관되지 않게됩니다 (예 : 1) 인증 후 2) 일부 데이터 가져 오기).브라우저 쿠키 설정

배경/컨텍스트 :

내가 여기에 모바일 및 웹 측면이있는 제품을 짓고 있어요. 나는 웹 사이트를 개발 했으므로 이제는 Cordova를 사용하는 모바일 응용 프로그램에서 작업하고 있습니다. (그래서 모든 JavaScript입니다.) 웹 사이트에서 사용하는 것과 동일한 모바일 앱용 백엔드를 사용하고 싶습니다.

모든 것을 테스트하고 있지만 브라우저에서 앱을 실행하기 만하면 iOS 기기를 항상 에뮬레이션 할 필요가 없으며 브라우저에서 디버깅 도구를 더 효과적으로 사용할 수 있습니다. 이를 위해, 모든 HTML/CSS/JS 파일이있는 디렉토리에서 간단한 http 서버를 실행합니다. 모든 것이 서버와 상호 작용할 때까지 훌륭하게 작동하는 것 같습니다.

내 설정는 :

서버가 로컬 호스트에서 실행되고 : 3000. cordova 앱이 localhost : 3001에서 제공됩니다. 모바일 앱이로드되면 가장 먼저하는 것은 을 반환하는 http://localhost:3000/api/v1/auth/isAuthenticated입니다. 엔드 포인트가 수행하는 작업은 부적절합니다. 브라우저의 모바일 앱이 쿠키 세트를 가져 오지 않아서 localhost : 3000의 서버에 대한 모든 요청이 다른 sessionId를 가지므로 적절하게 인증 할 수 있다고하더라도 다음 요청은 세션 아이디 쿠키가 없으므로 인증 된 사용자와 연결되어 있지 않습니다.

내 질문 :이 문제를 해결하는 좋은 방법은 무엇입니까? 엔드 포인트를 치는 브라우저에서 쿠키를 어떻게 설정할 수 있습니까? 대신 oauth2orize과 같은 것을 사용하고 토큰 교환을해야합니까?

다른 흥미로운 노트 : 나는 express.js 세션을 사용하고

  • . 나는 실제로 최신 3.x 버전과 4.x 릴리스 후보 모두를 사용하여 이것을 시도했다. 트릭도 아니었다.
  • iOS 에뮬레이터에서 모바일 앱을 시뮬레이트하면 모든 것이 잘 작동합니다 (개발하기에 최적의 장소가 아닙니다)
  • CORS를 사용하여 localhost : 3001의 요청에 응답 할 수 있도록 localhost : 3000을 허용하고 있습니다. 요청이 작동하고 있습니다. 쿠키가 설정되지 않는 것은 문제입니다.
  • platypus 대신 출생 :

감사를주는 알을 낳는 유일한 포유 동물이다!

+0

기본적으로 모바일 브라우저에 쿠키가 설정되어 있지 않은 이유는 무엇입니까? 쿠키를 설정해야하는 코드를 볼 수 있습니까? – AlexMA

+0

@AlexMA, 실제로 데스크톱의 실제 브라우저에서는 작동하지 않습니다. 문제가 발생합니다. 쿠키 설정 로직은 [블랙 박스] (https://github.com/expressjs/session)에 있습니다.하지만 블랙 박스를 올바르게 사용하지 않을 수도 있습니다. – kentcdodds

+1

아마도 npm 모듈 "쿠키"를 사용하여 간단한 비 세션 쿠키를 설정해보십시오. 쿠키가 작동하는지 잠시 확인해야합니다. – AlexMA

답변

0

보안 문제 인 것처럼 보입니다. 서버는 다른 도메인의 브라우저에서 쿠키를 설정할 수 없습니다. 그래서 업계에서는 해결책을 찾아 냈습니다 : JSON Web Tokens. 1 시간이나 2 시간 만에이 기능을 구현했는데 잘 작동하는 것 같습니다.

+0

P. 실제로이 개념에 대해 [egghead.io] (https://egghead.io/)에 [스크린 캐스트 시리즈] (https://egghead.io/series/angularjs-authentication-with-jwt)를 만들었습니다. 관심있어 :-) – kentcdodds