1.0.1 • Published 3 years ago

fastify-identity-plugin v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

fastify-identify-plugin

A common theme of my projects that involve route/ws authentication uses redis for authorization tokens (so they're revokable). Each token is a hmset stored in redis as token:entropyofcharacters (customiziable in plugin opts).

This plugin simply resolves the user the request is coming from (using the authorization header value to resolve the token set from redis), attachs it to the request object and optionally, a per route/per method rate limit can be enforced.

Example

import Identity from "fastify-identity-plugin";
import fastify, { FastifyRequest } from "fastify";

const app = fastify();

import * as redis from "redis";

(async () => {
  // You should load this in as a seperate plugin
  const redisClient = await redis.createClient({
    host: process.env.REDIS_HOST || "redis.giggl.systems",
    port: 6379,
  });

  app.register(Identity, {
    keyFormat: "token:#{k}",
    redis: redisClient,
    rateLimit: true,
    rateLimitResponse: { rateLimit: true },
  });
})();

app.get(
  "/",
  (
    req: FastifyRequest & {
      authorized: boolean,
      user: { id: string, username: string },
    },
    res
  ) => {
    console.log(req.authorized); // true | false
    console.log(req.user); // user obj
  }
);

app.listen(8080, "0.0.0.0", (err) => {
  if (err) {
    return console.log(err);
  }
  console.log("API > RUNNING ON PORT 8080");
});