나는 약간 오래된 것으로 알고 있지만 미래의 독자는 쿠키를 구문 분석하고 저장소 (예 : passport.socketio)에서 세션을 검색하는 접근법에 토큰 기반 접근법을 고려할 수도 있습니다.
이 예제에서는 꽤 표준 인 JSON 웹 토큰을 사용합니다.
var socketioJwt = require('socketio-jwt');
var sio = socketIo.listen(server);
sio.set('authorization', socketioJwt.authorize({
secret: jwtSecret,
handshake: true
}));
sio.sockets
.on('connection', function (socket) {
console.log(socket.handshake.decoded_token.email, 'has joined');
//socket.on('event');
});
을 다음과 같이
이제
var jwt = require('jsonwebtoken');
// other requires
app.post('/login', function (req, res) {
// TODO: validate the actual user user
var profile = {
first_name: 'John',
last_name: 'Doe',
email: '[email protected]',
id: 123
};
// we are sending the profile in the token
var token = jwt.sign(profile, jwtSecret, { expiresInMinutes: 60*5 });
res.json({token: token});
});
, 당신의 socket.io 서버를 구성 할 수 있습니다 :이 예에서는 JWT가 반환하는 인증 엔드 포인트를 상상 클라이언트 페이지로 토큰을 제공해야
var socket = io.connect('', {
query: 'token=' + token
});
나는이 메타에 대한 자세한 설명을 썼다 socket.io-JWT 미들웨어 만 첨부해야하는 클라이언트 있도록 연결할 때, 쿼리 문자열에서 토큰을 기대 쿠키 및 쿠키
here.
Socket.IO를 독립 실행 형으로 사용하고 있습니까?인증자는 쿠키를 생성하지 않고 Socket.IO에 전달합니다. – hexacyanide
@hexacyanide 내가 socket.io와 함께 express를 사용하고있는 순간. Express는 인증 쿠키 만 작성합니다. 나는 라우팅, 미들웨어, ....를 사용하지 않는다. express와 socket.io 사이의 세션은 connect-redis와 공유된다. 쿠키를 쓰는 데에만 익스프레스를 사용하는 것은 너무 큰 의존성이라고 생각합니다. 그래서 익스프레스 (연결)에 의존하지 않는 솔루션을 찾고 있습니다. 내 자신의 테스트 및 안전하지 않은 인증 절차를 구현할 수 있지만 Golo Roden이 권장하지는 않는다고 제안했습니다. – bekite
즉, 기본 HTTP 서버에서 실행되는 구현을 원하십니까? HTTP 서버를 완전히 사용하지 않으려면 쿠키를 사용하고 싶습니까? – hexacyanide