Skip to content

Custom Auth Plugin getting undefined in Route Definition  #43

@kutucode

Description

@kutucode

Im setting up a Fastify Rest-Api and wrote a Plugin to encapsulate my authentication logic which is based on JWT. Im using the preHandler Hook on each route that i want to protect but it seems that the beforeHandler or my plugin just gets ignored since i can just make a request without a token at all and get the data.

I looked up every piece of documentation but still cannot get it running. If i just console.log() my function fastify.authenticate i get an undefined.

This is my plugin customJwtAuth:

const fp = require('fastify-plugin')

async function customJwtAuth(fastify, opts, next) {

//register jwt 
 await fastify.register(require('fastify-jwt'),
    {secret: 'asecretthatsverylongandimportedfromanenvfile'})

fastify.decorate('authenticate', async function(request, reply) {
 try {
   const tokenFromRequest = request.cookies.jwt

  await fastify.jwt.verify(tokenFromRequest, (err, decoded) => {
     if (err) {
       fastify.log.error(err)
       reply.send(err)
    }
     fastify.log.info(`Token verified: ${decoded}`)
  })
  } catch (err) {
  reply.send(err)
  fastify.log.error(err)
  }
 })
next()
}
module.exports = fp(customJwtAuth, {fastify: '>=1.0.0'})

I register this plugin like this in my main server.js file:

  const customJwtAuth = require('./plugin/auth')
  fastify.register(customJwtAuth).after(err => {if (err) throw err})

Then i apply my function like this to the routes:

const fastify = require('fastify')
const productHandler = require('../handler/productHandler')

const productRoutes = [
  {
  method: 'GET',
  url: '/api/product',
  beforeHandler: [fastify.authenticate],
  handler: productHandler.getProducts
  }, ... ]

The api shouldnt return any Data if the request doesnt include a signed jwt or without a jwt at all.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions