Skip to content

Commit a88cb5b

Browse files
juni0rTahul
andauthored
feat: add server logout handler (#5)
Co-authored-by: Yaël Guilloux <yael.guilloux@gmail.com>
1 parent ed3dccb commit a88cb5b

4 files changed

Lines changed: 29 additions & 4 deletions

File tree

src/module.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,10 @@ export default defineNuxtModule<ModuleOptions>({
447447
handler: resolveLocal('./runtime/api/auth/login'),
448448
route: '/api/auth/login',
449449
})
450+
addServerHandler({
451+
handler: resolveLocal('./runtime/api/auth/logout'),
452+
route: '/api/auth/logout',
453+
})
450454
addServerHandler({
451455
handler: resolveLocal('./runtime/api/auth/verify'),
452456
route: '/api/auth/verify',

src/runtime/api/auth/login.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { H3Error, defineEventHandler, readBody, setHeaders } from 'h3'
1+
import { H3Error, defineEventHandler, readBody, setCookie, setHeaders } from 'h3'
22
import { useEdgeDbEnv, useEdgeDbPKCE } from '../../server'
33

44
export default defineEventHandler(async (req) => {
@@ -50,8 +50,11 @@ export default defineEventHandler(async (req) => {
5050

5151
const tokenResponseData = await tokenResponse.json()
5252

53-
setHeaders(req, {
54-
'Set-Cookie': `edgedb-auth-token=${tokenResponseData.auth_token}; HttpOnly; Path=/; Secure; SameSite=Strict`,
53+
setCookie(req, 'edgedb-auth-token', tokenResponseData.auth_token, {
54+
httpOnly: true,
55+
path: '/',
56+
secure: true,
57+
sameSite: true,
5558
})
5659

5760
return tokenResponseData

src/runtime/api/auth/logout.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { H3Error, defineEventHandler, getCookie, setCookie } from 'h3'
2+
3+
export default defineEventHandler(async (event) => {
4+
const authToken = getCookie(event, 'edgedb-auth-token')
5+
if (!authToken) {
6+
const err = new H3Error('Not logged in')
7+
err.statusCode = 401
8+
return err
9+
}
10+
11+
setCookie(event, 'edgedb-auth-token', '', {
12+
httpOnly: true,
13+
path: '/',
14+
secure: true,
15+
sameSite: true,
16+
expires: new Date(0)
17+
})
18+
})

src/runtime/plugin/edgedb-auth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default defineNuxtPlugin(async (nuxtApp) => {
2020
}
2121

2222
const logout = async (redirectTo: string) => {
23-
cookie.value = undefined
23+
await $fetch('/api/auth/logout')
2424
identity.value = undefined
2525
if (redirectTo)
2626
await navigateTo(redirectTo)

0 commit comments

Comments
 (0)