diff --git a/client/pages/account.vue b/client/pages/account.vue
index 456f001cc..e9b5da3cb 100644
--- a/client/pages/account.vue
+++ b/client/pages/account.vue
@@ -69,9 +69,8 @@
-
-
devices{{ $strings.ButtonLogoutAllDevices }}
-
logout{{ $strings.ButtonLogout }}
+
+ logout{{ $strings.ButtonLogout }}
@@ -88,7 +87,6 @@ export default {
newPassword: null,
confirmPassword: null,
changingPassword: false,
- loggingOut: false,
selectedLanguage: '',
newEReaderDevice: {
name: '',
@@ -137,7 +135,7 @@ export default {
updateLocalLanguage(lang) {
this.$setLanguageCode(lang)
},
- logout(allDevices = false) {
+ logout() {
// Disconnect from socket
if (this.$root.socket) {
console.log('Disconnecting from socket', this.$root.socket.id)
@@ -151,10 +149,8 @@ export default {
this.$store.commit('libraries/setUserPlaylists', [])
this.$store.commit('libraries/setCollections', [])
- this.loggingOut = true
- const url = allDevices ? '/logout?allDevices=1' : '/logout'
this.$axios
- .$post(url)
+ .$post('/logout')
.then((logoutPayload) => {
const redirect_url = logoutPayload.redirect_url
@@ -167,9 +163,6 @@ export default {
.catch((error) => {
console.error(error)
})
- .finally(() => {
- this.loggingOut = false
- })
},
resetForm() {
this.password = null
diff --git a/client/strings/en-us.json b/client/strings/en-us.json
index 7d9fca6b8..fb2bcb281 100644
--- a/client/strings/en-us.json
+++ b/client/strings/en-us.json
@@ -46,7 +46,6 @@
"ButtonLatest": "Latest",
"ButtonLibrary": "Library",
"ButtonLogout": "Logout",
- "ButtonLogoutAllDevices": "Logout All Devices",
"ButtonLookup": "Lookup",
"ButtonManageTracks": "Manage Tracks",
"ButtonMapChapterTitles": "Map Chapter Titles",
diff --git a/server/Auth.js b/server/Auth.js
index 17bd1160f..65532897d 100644
--- a/server/Auth.js
+++ b/server/Auth.js
@@ -471,23 +471,18 @@ class Auth {
res.json(openIdIssuerConfig)
})
- /**
- * Logout route
- * Use ?allDevices=1 to destroy every session for this user instead of just the current one
- */
+ // Logout route
router.post('/logout', async (req, res) => {
// Refresh token be alternatively be sent in the header
const refreshToken = req.cookies.refresh_token || req.headers['x-refresh-token']
- const allDevices = req.query.allDevices === '1'
// Clear refresh token cookie
res.clearCookie('refresh_token', {
path: '/'
})
- if (allDevices) {
- await this.tokenManager.invalidateAllSessionsForRefreshToken(refreshToken)
- } else if (refreshToken) {
+ // Invalidate the session in database using refresh token
+ if (refreshToken) {
await this.tokenManager.invalidateRefreshToken(refreshToken)
} else {
Logger.info(`[Auth] logout: No refresh token on request`)
diff --git a/server/auth/TokenManager.js b/server/auth/TokenManager.js
index 1f0417622..5ebc6530b 100644
--- a/server/auth/TokenManager.js
+++ b/server/auth/TokenManager.js
@@ -505,25 +505,6 @@ class TokenManager {
return null
}
- /**
- * Destroy all JWT sessions for the user that owns this refresh token
- *
- * @param {string} refreshToken
- */
- async invalidateAllSessionsForRefreshToken(refreshToken) {
- if (!refreshToken) return
-
- const session = await Database.sessionModel.findOne({
- where: {
- [Op.or]: [{ refreshToken: refreshToken }, { lastRefreshToken: refreshToken }]
- }
- })
- if (!session) return
-
- const numDeleted = await Database.sessionModel.destroy({ where: { userId: session.userId } })
- Logger.info(`[TokenManager] Invalidated all JWT sessions for user ${session.userId}, ${numDeleted} deleted`)
- }
-
/**
* Invalidate a refresh token - used for logout
*