Invalid body parameters

Hello ! I have a very strange problem, i'am switching my backend from NextJS to AdonisJS, I'm setting up better-auth on AdonisJS (NodeJS Framework) but i have a problem when i call this endpoint : POST / http://localhost:3333/api/auth/sign-in/email / { "email":"[email protected]","password":"Test"} And (maybe) better-auth return this : { "code": "VALIDATION_ERROR", "message": "Invalid body parameters" } Front -> NextJS -> signIn.email Backend -> AdonisJS --- I haven't found any similar problems on the discord/github
4 Replies
bekacru
bekacru2mo ago
you need to provide a content-type header set to application/json
A2m
A2mOP2mo ago
I make requests via Postman, the application/json content type is already set as standard. In fact on the nextjs backend it works fine but on the Adonis backend I get this error, maybe the middleware ?
bekacru
bekacru2mo ago
if you have a middleware that's parsing the body that could be another issue
A2m
A2mOP2mo ago
It was the middleware, it works now, I'll put it here if anyone has any problems with AdonisJS.
import type { HttpContext } from '@adonisjs/core/http'
import type { NextFn } from '@adonisjs/core/types/http'
import { auth } from '../utils/auth.js'
import logger from '@adonisjs/core/services/logger'
import { toNodeHandler } from 'better-auth/node'

export default class BetterAuthMiddleware {
private authHandler: ReturnType<typeof toNodeHandler>

constructor() {
this.authHandler = toNodeHandler(auth)
}

async handle(ctx: HttpContext, next: NextFn) {
const { request, response } = ctx

if (!request.url().startsWith('/api/auth')) {
return next()
}

try {
logger.info('Better Auth request received', {
url: request.url(),
method: request.method(),
contentType: request.header('content-type')
})

const req = request.request
req.url = request.url()
;(req as any).originalUrl = request.url()

await this.authHandler(req, response.response)


} catch (error) {
logger.error('Error in Better Auth middleware', error)

try {
return response.status(500).send({
error: 'Error processing Better Auth request',
message: error.message
})
} catch (e) {
logger.error('Impossible to send error response', e)
}
}
}
}
import type { HttpContext } from '@adonisjs/core/http'
import type { NextFn } from '@adonisjs/core/types/http'
import { auth } from '../utils/auth.js'
import logger from '@adonisjs/core/services/logger'
import { toNodeHandler } from 'better-auth/node'

export default class BetterAuthMiddleware {
private authHandler: ReturnType<typeof toNodeHandler>

constructor() {
this.authHandler = toNodeHandler(auth)
}

async handle(ctx: HttpContext, next: NextFn) {
const { request, response } = ctx

if (!request.url().startsWith('/api/auth')) {
return next()
}

try {
logger.info('Better Auth request received', {
url: request.url(),
method: request.method(),
contentType: request.header('content-type')
})

const req = request.request
req.url = request.url()
;(req as any).originalUrl = request.url()

await this.authHandler(req, response.response)


} catch (error) {
logger.error('Error in Better Auth middleware', error)

try {
return response.status(500).send({
error: 'Error processing Better Auth request',
message: error.message
})
} catch (e) {
logger.error('Impossible to send error response', e)
}
}
}
}

Did you find this page helpful?