-
Brian Warner authored
With this change, existing session cookies are invalidated when the user changes their password. This will also support a "log me out of everywhere" button, which merely needs to update the superSessionToken as if the password was changed. This adds .superSessionToken to all sessions in wsapi.authenticateSession, and checks it against the database row in during a new checkExpiredSession() call (run for all /wsapi requests, both GETs and POSTs). All database methods which create an account or modify the password were changed to also set .superSessionToken (to the current time). updatePassword() added an 'invalidateSessions' argument so passwords can be rehashed (when the bcrypt work factor changes) *without* invalidating sessions. Finally, the database added a new method named superSessionToken() to retrieve the current value, for comparison in checkExpiredSession(). wsapi/update_password.js is changed to add a call to authenticateSession after changing the password, to update the cookie with the new .superSessionToken. This ensures that the user's new session works on the next call after update_password. Database rows that don't have a superSessionToken (created before the code was upgraded to include this change) will not enforce session-checking, so user sessions will not be spontaneously expired when the server is upgraded past this revision.
1b0444d8