Skip to content Skip to sidebar Skip to footer

Expressjs Doesn't Destroy Session

I have an Backbone View which sends an Ajax call to the server to remove a session. On the server following event is triggered: app.delete('/session', function(req, res) { if (

Solution 1:

To concentrate all comments together I have written an answer:

Because express always creates a session and a cookie for a client we have to take a different approach than just to check if there is a session.

This parts handles logins

app.post('/session', function(req, res) {
    User.findOne({ username: req.body.username })
        .select('salt') // my mongoose schema doesn't fetches salt
        .select('password') // and password by default
        .exec(function(err, user) {
            if (err || user === null) throw err; // awful error handling here// mongoose schema methods which checks if the sent credentials// are equal to the hashed password (allows callback)
            user.hasEqualPassword(req.body.password, function(hasEqualPassword) {
                if (hasEqualPassword) {
                    // if the password matches we do this:
                    req.session.authenticated = true; // flag the session, all logged-in check now check if authenticated is true (this is required for the secured-area-check-middleware)
                    req.session.user = user; // this is optionally. I have done this because I want to have the user credentials available// another benefit of storing the user instance in the session is// that we can gain from the speed of redis. If the user logs out we would have to save the user instance in the session (didn't tried this)
                    res.send(200); // sent the client that everything gone ok
                } else {
                    res.send("wrong password", 500); // tells the client that the password was wrong (on production sys you want to hide what gone wronge)
                }
            });
        });
});

That was the login part lets go to the logout:

app.delete('/session', function(req, res) {
    // here is our security check// if you use a isAuthenticated-middleware you could make this shorterif (req.session.authenticated) {
        // this destroys the current session (not really necessary because you get a new one
        req.session.destroy(function() {
            // if you don't want destroy the whole session, because you anyway get a new one you also could just change the flags and remove the private informations// req.session.user.save(callback(err, user)) // didn't checked this//delete req.session.user;  // remove credentials//req.session.authenticated = false; // set flag//res.clearCookie('connect.sid', { path: '/' }); // see comments above                res.send('removed session', 200); // tell the client everything went well
        });
    } else {
        res.send('cant remove public session', 500); // public sessions don't containt sensible information so we leave them
    }
});

Hope this helps

Post a Comment for "Expressjs Doesn't Destroy Session"