Как указано во многих комментариях ниже, API Socket.IO изменился в их выпуске 1.0
. Аутентификация теперь должна выполняться с помощью функции промежуточного программного обеспечения, см. «Различия аутентификации» @ http://socket.io/docs/migrating-from-0-9/#authentication-differences. Я включу свой оригинальный ответ для тех, кто застрял на ‹ 1.0, поскольку старые документы, похоже, ушли.
1.0 и выше:
Сторона клиента:
//The query member of the options object is passed to the server on connection and parsed as a CGI style Querystring.
var socket = io("http://127.0.0.1:3000/", { query: "foo=bar" });
Сторона сервера:
io.use(function(socket, next){
console.log("Query: ", socket.handshake.query);
// return the result of next() to accept the connection.
if (socket.handshake.query.foo == "bar") {
return next();
}
// call next() with an Error if you need to reject the connection.
next(new Error('Authentication error'));
});
До 1.0
Вы можете передать query: param во втором аргументе для подключения () на стороне клиента, который будет доступен на сервере в методе авторизации.
Я только что тестировал это. На клиенте у меня есть:
var c = io.connect('http://127.0.0.1:3000/', { query: "foo=bar" });
На сервере:
io.set('authorization', function (handshakeData, cb) {
console.log('Auth: ', handshakeData.query);
cb(null, true);
});
Вывод на сервере тогда выглядел так:
:!node node_app/main.js
info - socket.io started
Auth: { foo: 'bar', t: '1355859917678' }
Обновлять
3.х и выше
Вы можете передать полезную нагрузку аутентификации, используя параметр auth в качестве второго аргумента для connect() на стороне клиента.
Сторона клиента:
io.connect("http://127.0.0.1:3000/", {
auth: {
token: "AuthToken",
},
}),
На стороне сервера вы можете получить к нему доступ, используя socket.handshake.auth.token
Сторона сервера:
io.use(function(socket, next){
console.log(socket.handshake.auth.token)
next()
});
person
Alex Wright
schedule
18.12.2012