2016-10-12 6 views
0

그래서 여기서는 expressJ를 사용하여 NodeJS를 기반으로하는 애플리케이션을 백엔드 및 반응 프론트 엔드로 구축하고 있습니다. 백엔드에서는 현재 사용자가 로그인하여 이벤트를 만들 수 있습니다. 이 기능은 Postman을 사용하여 테스트되었으며 정상적으로 작동합니다.익스프레스 반응 쿠키 문제

이제 프론트 엔드에서 백엔드가 내가 권한이 없다고 알려줍니다. 재미있게도 크롬 확장을 사용하여 Postman의 쿠키로 저장된 쿠키 (프론트 엔드의 브라우저에서)를 바꿀 때 갑자기 작동합니다. 따라서 어떻게 든 쿠키가있는 어떤 것이 잘못 될 것입니다.

//Session used in express 
app.use(session({ 
    resave: true, 
    saveUninitialized: true, 
    secret: process.env.SESSION_SECRET, 
    store: new MongoStore({ 
    url: process.env.MONGODB_URI || process.env.MONGOLAB_URI, 
    autoReconnect: true 
    }), 
    name: 'UsE' 
})) 

프론트 엔드는 fetch polyfill을 사용하여 로그인 요청을합니다.

그런 다음 백엔드는 pasport를 사용하여 사용자를 인증하며 모든 것이 잘되어야합니다. 나는 여기에서 쟁점이 될 수있는 것에 관해서는 완전히 상실하고있다.

다음은 백엔드에 401을 다시 요청하는 코드입니다. 기본 fetch polyfill does not pass along cookies to the server으로

export const createEvent = (infos) => (dispatch) => { 
    dispatch(startFetching('createEvent')) 
    return fetch(baseURL +'/api/event', { 
     method: 'POST', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json' 
     }, 
     credentials: 'include', 
     body: JSON.stringify(infos) 
    }) 
    .then(response => response.json()) 
    .then(json => { 
     if (json.msg) { 
      dispatch(displayToast(json.msg)) 
     } 
     if(json.event) { 
      dispatch(addEvent(json.event)) 
      dispatch(push(`/event/${json.event._id}`)) 
     } 
     dispatch(endFetching('createEvent')) 
    }) 
} 
+0

당신은 정말 세션을 유지하기위한'몽고 DB'가 필요하십니까? –

+0

안녕하세요, 이것 좀보세요, 도움이 될 수 있습니다 - https://medium.com/@ar7casper/authentication-using-express-js-passport-js-7ae7a7484a55#.u6b9lpdeb – alexunder

+0

@PraneshRavi 그는 문서가 없으면 세션이 누출되는 메모리 문제가 발생하기 때문입니다. –

답변

0

. 같은 원산지로 요청한 send cookies의 경우 fetch()에 전달하는 옵션에 credentials: 'same-origin'을 포함해야합니다.

업데이트 된 코드는 다음과 같아야합니다

fetch(baseURL + '/api/login', { 
      method: 'POST', 
      credentials: 'same-origin', 
      headers: { 
       'Accept': 'application/json', 
       'Content-Type': 'application/json' 
      }, 
      body: JSON.stringify({ 
       email, 
       password 
      }) 

}).then(response => { // ... 
+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 이것은 굉장 하겠지만 현재 CORS를 사용하고 CORS에 대한 문서에 따라'credentials' 필드를 "include"로 설정하십시오. –