2011-11-06 31 views
6

Tôi gặp sự cố khi nhận dữ liệu "cookie" từ ủy quyền socket.io của mình.ủy quyền node.js + express.js + socket.io: không có cookie

io.configure(function() { 
io.set('authorization', function (data, cb) { 
    console.log(data); 
    // data.headers.cookie <-- should be the cookie 
}); 
}); 

Vì vậy, những gì nó in là:

{ headers: 
{ host: 'frisr.dk:1000', 
connection: 'keep-alive', 
origin: 'http://frisr.dk', 
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2', 
accept: '*/*', 
referer: 'http://frisr.dk/', 
'accept-encoding': 'gzip,deflate,sdch', 
'accept-language': 'da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4', 
'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' }, 
address: { address: '80.71.135.24', port: 53549 }, 
time: 'Sun Nov 06 2011 22:34:12 GMT+0000 (UTC)', 
query: { t: '1320610986125' }, 
url: '/socket.io/1/?t=1320610986125', 
xdomain: true, 
secure: undefined, 
issued: 1320618852796 } 

bạn có thể kiểm tra mã ra ở đây: http://frisr.dk

Tại sao là cookie không có sẵn?

+2

Vì không có 'sở hữu cookie' trong 'data.headers' ... –

+1

làm thế nào để tôi nhận được nó ở đó: D – Danielss89

+0

Em bắt được để giải quyết vấn đề này? Tôi cũng đang gặp vấn đề tương tự. – user482594

Trả lời

0

Hãy xem this question liên quan đến socket.io và xác thực. Trên thực tế, có thực sự a bunch các câu hỏi về chủ đề này :)

+1

Nhưng những gì tôi làm * nên * hoạt động. Nó hoạt động trên một máy chủ khác tôi có, nhưng tôi không có ý tưởng về lý do tại sao nó không hoạt động trên máy chủ này. – Danielss89

0

Bạn có xem xét là, không có bất kỳ "cookie" tiêu đề, một cái gì đó giống như

cookie: sid=whatsoever 

Tôi đoán gì đó không ổn trong bạn ứng dụng. tệp cấu hình js. Nếu bạn không tạo ứng dụng bằng lệnh $ express --sessions myApp trong thư mục gốc của ứng dụng, bạn sẽ không có bất kỳ cookie nào trong tiêu đề.

Để đảm bảo bạn có các tập tin cookie, hãy cố gắng nhìn vào cấu hình app.js của bạn:

app.configure(function(){ 
    app.set('port', process.env.PORT || 8080); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    //this snippet here 
    app.use(express.cookieParser('your secret here')); 
    app.use(express.session()); 
    //end of snippet 
    app.use(app.router); 
    app.use(require('less-middleware')({ src: __dirname + '/public' })); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 
1

Cookie không beeing đặt trong yêu cầu bắt tay. Có lẽ cookie đã được đặt cho máy chủ/miền khác nhau và đó là lý do tại sao trên máy chủ thứ hai của bạn nó tồn tại trong đối tượng dữ liệu của bạn. Kiểm tra xem cookie có được đặt cho tên miền này trong smack firebug hay không.

7

Hãy đi lang thang tại máy chủ của bạn. Khách hàng của bạn đang kết nối với ai? Tôi đã có một vấn đề với expressjs 3. * và Socket.io là tốt, nhưng tôi đã phát hành khách hàng của tôi để kết nối như:

io.connect(127.0.0.1);

Thay vì

io.connect('localhost');

Bây giờ hack cùng với thói quen phân tích cú pháp mới đáng yêu.

https://groups.google.com/forum/?fromgroups=#!topic/express-js/II3eIM9HHQY

+0

bạn tiết kiệm cuộc sống của tôi :) –

+0

và của tôi, cảm ơn – mdikici

Các vấn đề liên quan