Node.js (Express 프레임 워크)을 사용하여 웹 사이트를 만들고 인증을 위해 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 데이터베이스에서 사용자를 검색하고 Username/Password 조합이 맞으면 로그인합니다. 분명히 작동하지 않습니다
내 솔루션 :
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();
});
});
나는 HTTP 요청을 만들려면 다음과 같이 정의
xmlhttprequest
라는 노드 모듈을 사용했다.
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 ||||||
이 있습니다. 또한 브라우저 주소창에 http://localhost:3000/exit
을 입력 한 다음 Enter 키를 누르면 브라우저에 Cannot GET /exit
메시지가 표시되지만 페이지를 다시 누르면 사용자가 로그 아웃됩니다.
무엇이 표시되지 있습니까? 당신이 가진 것이 그것이 효과가있는 것처럼 보입니다. 아니면 아직 서버에 구현하지 않았습니까? – jcolebrand
연결 해제 이벤트 내에 있어야 할 코드를 모르겠습니다. – Shekhar
질문을 편집했습니다. 한번 봐주세요! – Shekhar