Files
lynq-chat/packages/backend/src/lib/auth.ts
T
2026-03-18 22:42:33 +09:00

37 lines
1.0 KiB
TypeScript

import type { FastifyPluginCallback } from "fastify";
import fp from "fastify-plugin";
import { TokenEntity } from "@/modules/entities/Token";
import logger from "./logger";
import { DatabaseError, ErrorBase } from "@/errors";
declare module "fastify" {
interface FastifyRequest {
token: TokenEntity | ReturnType<typeof ErrorBase>;
}
}
const Authorization: FastifyPluginCallback = (fastify) => {
fastify.addHook("onRequest", async (req, res) => {
const token = req.headers["authorization"];
if (typeof token !== "string") {
return req.token = ErrorBase({
bad: "client",
code: "token_none",
message: "トークンが設定されていません。",
});
}
try {
const result = await fastify.orm.em.getRepository(TokenEntity).authToken(token);
req.token = result;
} catch (err) {
logger.error("Database Error: Token authorization failed:", err);
return res.code(500).send(DatabaseError());
}
});
}
export default fp(Authorization);