2014-02-18 2 views
0

두 가지 가능성이있어서 websocket을 완전히 설정하기 전에 검사를 수행하는 솔루션을 선호합니다.Express.io에서 websocket 연결 요청을 승인하는 방법은 무엇입니까?

var express = require("express.io"); 
var app = express().http().io(); 

app.use(express.json()); 
app.use(express.cookieParser()); 
app.use(express.session({secret: process.env.COOKIESECRET})); 

옵션 1 : Express 세션 오브젝트를 얻는 방법은 무엇입니까?
업데이트 : Express.io가 Socket.io에서 Express 세션을 사용할 수있게하는 자체 "권한 부여"기능을 등록하기 때문에이 방법을 사용할 수 없습니다.

app.io.configure(function() { 
    app.io.set("authorize", function(handshake, authorize) { 
    // Cookie is available...? 
    //handshake.headers.cookie 
    }); 
}); 

옵션 2 : Express 세션을 쉽게 얻을 수 있지만 연결이 이미 설정되었습니다.

app.io.route("test", function(req) { 
    if(!req.session.IsAuthorized) { 
    req.io.disconnect(); 
    } 
}); 

답변

1

그것을 사용할 수 있도록 당신이 당신의 소켓 서버 구성 할 때 당신은 당신의 sessionstore에 대한 참조를 전달할 수 있습니다

var sessionStore = new express.session.MemoryStore(); 

app.use(express.session({secret: process.env.COOKIESECRET, store: sessionStore})); 

을 나는 당신이 handshake.headers을 일치시켜 거기에서 휴식을 얻을 수 있어야한다고 생각합니다 세션 스토어에 물건을 넣을 수있는 물건. 기본 저장소는 메모리에 저장되어 있으므로 프로덕션 용도로는 좋지 않습니다 (하지만 지금은 괜찮습니다). 위의 귀하의 옵션 1 방법과 관련이 있습니다.

+0

[이] (http://stackoverflow.com/questions/15169418/how-can-i-get-sessions-to-work-using-redis-express)를 사용하여 Redis 저장소를 얻는 데 문제가 있습니다. -socket-io)와 [this] (https://github.com/techpines/express.io/tree/master/examples#scaling-with-redis)에 대해서는 특별히 물어 보지 않았습니다. Express.io는 이미 옵션 2에서 입증 된 것처럼 Express와 Socket.io 세션 처리를 결합했습니다. Express.io에는 이미 제안한대로 세션과 일치하는 "권한 부여"기능이 정의되어 있습니다. – Ioan

+0

귀하의 질문은 무엇입니까? 나는 당신이 당신의 질문으로 이해했던 확립 된 연결 이전에 세션에 접근 할 수있는 방법을주었습니다. – Deif

+0

새로운 발견으로 질문을 업데이트했습니다. 당신이 권장하는 것은 Express.io에서 이미 완성되었으므로, 옵션 1은 작동하지 않습니다 (내가 이해하는 한). – Ioan

관련 문제