fastify-identity-plugin
v1.0.1
Published
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](https://redis.io/commands/HMSET) stored in redis as `token:entropyofcharacters` (customiziable in plugin
Downloads
2
Readme
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");
});