我使用Node.js(Express Framework)創建網站並使用Passportjs進行身份驗證。我使用socket.io在客戶端和服務器之間進行通信。我的網站顯示哪些用戶在線。我想要的是,當客戶端關閉其選項卡或瀏覽器本身而不退出網站,我想從該網站時'disconnect'
事件觸發被註銷的用戶。代碼片段應該看起來像在server
一側。Node.js/Socket.io/Passport.js註銷問題
io.sockets.on('connection', function (socket) {
socket.on('disconnect', function() {
console.log("|||||| DISCONNECTED ||||||");
//LOGOUT USER CODE
});
});
我使用Passportjs的本地策略。它在CouchDB數據庫中搜索用戶,並在用戶名/密碼組合正確的情況下登錄。
我的解決方案,它顯然是行不通的:
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(__dirname + '/'));
app.use(express.session({ secret: 'keyboard cat'}));
// Initialize Passport! Also use passport.session() middleware, to support
// persistent login sessions (recommended).
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
//a new custom middleware to logout the user when the pathname is '/exit'
app.use(function(req, res, next) {
var pathname = url.parse(req.url).pathname;
if(pathname == '/exit')
req.logout();
next();
});
});
我用叫xmlhttprequest
一個節點模塊中這樣定義創建HTTP請求。
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
然後在我的套接字的斷開事件我添加了以下幾行。
io.sockets.on('connection', function (socket) {
socket.on('disconnect', function() {
console.log("|||||| DISCONNECTED ||||||");
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:3000/exit");
xhr.send();
});
});
這不工作,用戶不退出時disconnect
事件觸發。我可以在控制檯上看到此消息|||||| DISCONNECTED ||||||
。在我的瀏覽器,但在回壓並刷新用戶註銷頁面Cannot GET /exit
:另外,如果我在瀏覽器地址欄中輸入http://localhost:3000/exit
,然後按回車鍵,我看到這條消息。
什麼是它沒有顯示?你有什麼似乎應該工作。或者你有沒有試圖在服務器上實現任何東西? – jcolebrand 2012-08-06 17:53:33
我不知道斷開連接事件中應該存在的代碼。 – Shekhar 2012-08-07 07:33:34
我編輯了這個問題。請看一看! – Shekhar 2012-08-07 07:44:32