2014-09-10 3 views
1

저는 노드 세계에 새로운 경험이 있습니다. 나는 며칠 동안이 문제를 둘러 보았고 기존의 npm "공식"솔루션으로는이를 수행 할 방법을 찾을 수 없습니다. 사과 할 경우 올바른 노드 리소스를 찾을 수있게되기를 바랍니다.쿠키가없는 Passport.js 세션 관리

저는 인터넷에서 사용할 수있는 다양한 예제에 따라 근무 여권 로컬 정책을 구현했습니다. 잘 작동합니다.

이제 세션 관리를 구현하고 싶습니다. 쿠키를 사용하지 않고 GET/POST 매개 변수를 사용하고 싶습니다. 그 이유는 쿠키/헤더가 존재하지 않는 HTTP (사용자 정의 프로토콜)와 함께 작동해야하는 API 서비스를 위해이 기능을 구현했기 때문입니다.

나는 모든 세션이 여권과 함께 구현을 지원하는 것을 보았고 모두 익스프레스/커넥트 세션 패키지에 의존하는 것으로 보인다. 쿠키는 오직 쿠키 만 지원하고 세션 키는 POST/GET 매개 변수

맞춤식 솔루션을 출시하기 전에 이미 사용 가능한 것으로 알려줄 수 있습니까?

답변

0

그럴 수 없다는 것을 알 수 있습니다. 상황은 여전히 ​​대답 : passport.js local strategy- logging in with username, authenticate later requests with token`에 의해 유추 될 수 있습니다.

나는 내 자신을 창조했다.

  • 로그인을 처리하고 다시 사용자에게 전송되는 JWT 토큰을 생성하기 위해 지역 전략 : 는 공식적으로 내가 사용하는 방법은 두 개의 여권 전략을 가지고있다.
  • GET 또는 POST 매개 변수에서 토큰을 검색하고 토큰에 저장된 사용자 ID를 사용하여 사용자 데이터베이스를 쿼리하는 후속 요청을 인증하는 방법입니다. jwt 솔루션은 node-jwt-simple https://github.com/hokaccha/node-jwt-simple을 사용합니다.

모두 작동하지만 쿠키 기반 세션으로 쉽게 폴백 할 수있는 기능을 잃어 버렸습니다. 나보다 숙련 된 사람이 표준 표현 세션을 활용하여 해결책을 만들 수 있기를 바랍니다. nmp

+0

[angular-fullstack generator] (https://github.com/DaftMonk/generator-angular-fullstack)는 쿠키 기반 세션과 무기명 전략을 결합한 앱을 만들 수 있습니다. jwt 폴백을 쿠키 세션에 구현하는 것은 그리 어렵지 않을 수 있습니다. – CKK

+0

네, 그 것처럼 보입니다. 원리는 제가 한 것과 매우 유사합니다. 이러한 솔루션의 문제점은 특정 프레임 워크에서 작업하고 미래에 제한 될 수있는 프레임 워크를 배우고 문서가 꽤 희소하기 때문에 배우는 데 많은 시간을 요구한다는 것입니다. 어쨌든, 팁 주셔서 감사합니다, 노드 각진 애플 리케이션을 위해 그것은 재미있는 솔루션으로 보입니다 – brzm

2

이렇게 할 수 있습니다.

passport.js는 실제 세션 인프라에 npm express-session 미들웨어를 사용합니다. 다만 명시 세션 미들웨어 전에 미들웨어 기능을 추가하여 명시 적 설정에서

  1. : 급행 지원하는 임의의 미들웨어를 파이프 라인 때문에

    나는 다음과 같은 해결 방법을 사용할 수 있었다.

  2. 미들웨어 기능에서 세션 토큰/아이디가 요청에 있는지 (필요한 경우 헤더 또는 본문에 있는지) 확인하고 필요하면 세션 토큰/아이디를 확인하십시오.

  3. 세션 토큰/아이디를 (쿠키 파서를 사용하는 경우) request.cookies 객체에 설정하거나 헤더의 직렬화 된 쿠키에 추가하십시오. request.headers.cookie + = ... my new 쿠키가 여기에 ...

명시 세션 지금 소생에 대한 요청 떨어져 데리러 수 있어야 당신이 명시 적 세션에 통과하면 이름 뒤에 쿠키의 이름을 확인합니다.

+0

나는 그것을 시도하고 작동하도록 만들 수 없습니다. 'express-session'코드로 sessionID에 서명하는 방법을 살펴 보았습니다. 동일한 방법으로 쿠키에 서명하고 req.cookies [ 'connect.sid]로 설정했습니다. 당신이 말한 것을 시도해 보았습니다. 즉 쿠키 구문 분석기 미들웨어 전에 req.headers.cookie에 연결했습니다. 그것도 작동하지 않았다. 두 방법 모두 req.cookies 객체의 값을 변경했지만 req.sessionID를 기록하여 확인 된 sessionID는 변경하지 않았습니다. 그래서, 나는 뭔가를 놓치고 있거나 그것이 효과가 없습니까? 나는 그것이 작동하도록 만들 수 없습니다. –

+0

효과가있었습니다. 내가 요청을 보낼 때, 나는 이미 그 요청에 "connect.sid"를 가지고 있으며, 연결함으로써, 같은 이름을 가진 두 개의 키 (즉, "connect.sid")를 가지며, 쿠키 파싱 후에, 첫 번째 하나. 이것은 req.cookies에 올바른 값을 유지하기위한 것입니다. 그리고 나는 "express-sessions"코드를보고, "express-session"이 sessionID의 올바른 값을 사용하기 위해, req.headers.cookie를 편집하기 위해 미들웨어를 배치해야한다는 것을 알았습니다. 단지 req를 편집하는 것입니다. req.headers 자체를 사용하기 때문에 쿠키 파서를 사용한 후 .cookies가 도움이되지 않습니다. 솔루션을 가져 주셔서 감사합니다! –