-
-
Notifications
You must be signed in to change notification settings - Fork 54
Open
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation
Description
Nuxt uses Nitro and (H3)[https://v1.h3.dev/] from the UnJS ecosystem to handle server side processing. See Nuxt Server Engine
I want to provide the following files in my /server/routes/oauth2 folder as a starting point to build an Nitro JS handler.
This example code does not demonstrate proper user account and scope authorization and therefor should not be used in production
authorize.get.ts
import { serverSupabaseUser } from '#supabase/server'
import { isOAuthError } from '@jmondi/oauth2-server'
import { authorizationServer } from '../../utils/server'
export default defineEventHandler(async (event) => {
const user = await serverSupabaseUser(event)
const headers = await getHeaders(event)
const query = await getQuery(event)
if (!user) return sendError(event, { statusCode: 401, message: 'Not logged in', name: 'Unauthorized' })
try {
const oauthResponse = await authorizationServer.validateAuthorizationRequest({ body: {}, headers, query })
oauthResponse.user = user
oauthResponse.isAuthorizationApproved = true
const response = await authorizationServer.completeAuthorizationRequest(oauthResponse)
setResponseStatus(event, response.status)
setHeaders(event, response.headers)
return response.body
}
catch (error: unknown) {
console.error(error)
if (isOAuthError(error)) throw createError(error)
throw error
}
})token.post.ts
import { isOAuthError } from '@jmondi/oauth2-server'
import { authorizationServer } from '../../utils/server'
export default defineEventHandler(async (event) => {
const body = await readBody(event)
const headers = await getHeaders(event)
const query = await getQuery(event)
try {
const response = await authorizationServer.respondToAccessTokenRequest({ body, headers, query })
setResponseStatus(event, response.status)
setHeaders(event, response.headers)
return response.body
}
catch (error: unknown) {
console.error(error)
if (isOAuthError(error)) throw createError(Object.assign(error, { data: { query, body } }))
throw error
}
})@jasonraimondi I would love to take on building some functions or even a nuxt module implementation of this. While this code here servers as a starting point if someone else wants to make suggestions or take it on before I have the time.
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation