2016-07-04 2 views
0

범용 앱에서는 서버/서버 http 요청시 모든 사용자 쿠키가 느슨합니다.) 쿠키가 예상대로 여기에 A (GET/히트)서버/서버 요청시 쿠키 전송

const fetch = require('isomorphic-fetch'); 
const bodyParser = require('body-parser'); 
const cookieParser = require('cookie-parser'); 
const session = require('express-session'); 

const server = require('express')(); 

server.use(bodyParser()); 
server.use(cookieParser()); 

server.use(session({ 
    secret: 'foo', 
    httpOnly: false 
})); 

server.get('/set-cookies', (req, res) => { 
    req.session.user = { name: 'john doe' }; 
    res.send('OK'); 
}); 

server.get('/a', (req, res) => { 
    console.log('COOKIE IN A = ', req.cookies); // Cookies are here ! 

    const options = { credentials: 'include' }; 

    fetch('http://localhost:3131/b', options) 
    .then(() => { 
     res.send('OK'); 
    }); 
}); 

server.get('/b', (req, res) => { 
    console.log('COOKIES IN B = ', req.cookies); // Cookies are lost ! How to get it back ? 
    res.sendStatus(200); 
}); 

server.listen(3131); 

1) GET/설정 쿠키 2 명중

문제를 : 나는 일을 재현 작은 nodeJS 응용 프로그램을 구축해야 할 때/컨트롤러가 GET/b로 AJAX 요청을하면 쿠키를 전송하지 않으므로 경로/b가 사용자를 인증 할 수 없습니다.

모든 요청에 ​​대해 사용자 쿠키를 전송하는 방법은 무엇입니까? "쿠키 항아리"에 대해 들었지만 그게 무엇인지 명확하게 설명 할 수 없었습니다. 누군가 웹에 대해 명확한 설명을 찾지 못했습니다. 누군가가 그것에 대한 지식을 공유 할 수 있다면 좋을 것입니다.

+0

@MukeshSharma은 내가 – Ludo

+0

당신이 할 수있는 ... "보편적 인 응용 프로그램에서"이, 물론 난 내 응용 프로그램에서이 코드를 사용하려고 시도하지하고있는 기술 사례를 재현하는 단지 방법으로 나의 메시지를 시작 코드를 공유하고'/ a'에서'/ b'를 어떻게 호출하고 있습니까? –

+0

@MukeshSharma 범용 (또는 동형) 앱은 클라이언트와 서버 측에서 동일한 코드를 실행하는 애플리케이션입니다. /a에서/b를 호출하는 코드는 이미 내 게시물에 있습니다. fetch() 호출입니다. – Ludo

답변

1

whatwg-fetch에는 다음과 같이 쿠키를 보낼 수있는 옵션이 있지만 제대로 작동하지 않는 것 같습니다.

fetch('http://localhost:3131/b', { 
    credentials: 'same-origin' 
}); 

수동으로 쿠키를 다음과 같은 방법으로 fetch으로 보낼 수 있습니다.

server.get('/a', (req, res) => { 
    console.log('COOKIE IN A = ', req.cookies); // Cookies are here ! 
    const options = { 
     'headers' : { 
      'Cookie': req.headers.cookie 
     } 
    }; 

    fetch('http://localhost:3131/b', options) 
     .then(() => { 
      res.send('OK'); 
     }); 
});