Skip to content

Commit ef8c738

Browse files
ekzyishuumn
andauthored
Reset multi_auth to initial state on error (#2007)
* Reset multi auth to initial state * Also check if next-auth.session-token exists --------- Co-authored-by: Keyan <[email protected]>
1 parent 8a6b825 commit ef8c738

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

Diff for: lib/auth.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ function switchSessionCookie (request) {
9292
}
9393

9494
async function checkMultiAuthCookies (req, res) {
95-
if (!req.cookies[MULTI_AUTH_LIST] || !req.cookies[MULTI_AUTH_POINTER]) {
95+
if (!req.cookies[MULTI_AUTH_LIST] || !req.cookies[MULTI_AUTH_POINTER] || !req.cookies[SESSION_COOKIE]) {
9696
return false
9797
}
9898

@@ -116,15 +116,23 @@ async function checkMultiAuthCookies (req, res) {
116116
return true
117117
}
118118

119-
function resetMultiAuthCookies (req, res) {
119+
async function resetMultiAuthCookies (req, res) {
120120
const httpOnlyOptions = cookieOptions({ expires: 0, maxAge: 0 })
121121
const jsOptions = { ...httpOnlyOptions, httpOnly: false }
122122

123+
// remove all multi_auth cookies ...
123124
for (const key of Object.keys(req.cookies)) {
124125
if (!MULTI_AUTH_REGEXP.test(key)) continue
125126
const options = MULTI_AUTH_JWT_REGEXP.test(key) ? httpOnlyOptions : jsOptions
126127
res.appendHeader('Set-Cookie', cookie.serialize(key, '', options))
127128
}
129+
130+
// ... and reset to initial state if they are logged in
131+
const token = req.cookies[SESSION_COOKIE]
132+
if (!token) return
133+
134+
const decoded = await decodeJWT({ token, secret: process.env.NEXTAUTH_SECRET })
135+
setMultiAuthCookies(req, res, { ...decoded, jwt: token })
128136
}
129137

130138
async function refreshMultiAuthCookies (req, res) {
@@ -170,7 +178,7 @@ export async function multiAuthMiddleware (req, res) {
170178

171179
const ok = await checkMultiAuthCookies(req, res)
172180
if (!ok) {
173-
resetMultiAuthCookies(req, res)
181+
await resetMultiAuthCookies(req, res)
174182
return switchSessionCookie(req)
175183
}
176184

0 commit comments

Comments
 (0)