feat(auth): add session middleware for user authentication and context management

This commit is contained in:
ngc2207 2025-01-31 20:25:45 +08:00
parent b4a986f51e
commit 5bb77e4ad4

View File

@ -0,0 +1,55 @@
import "server-only";
import {
Client,
Account,
Databases,
Storage,
Models,
type Account as AccountType,
type Databases as DatabasesType,
type Storage as StorageType,
type Users as UsersType,
} from "node-appwrite";
import { getCookie } from "hono/cookie";
import { createMiddleware } from "hono/factory";
import { AUTH_COOKIE } from "@/features/auth/constants";
type AdditionalContext = {
Variables: {
account: AccountType;
databases: DatabasesType;
storage: StorageType;
users: UsersType;
user: Models.User<Models.Preferences>;
};
};
export const sessionMiddleware = createMiddleware<AdditionalContext>(
async (c, next) => {
const client = new Client()
.setEndpoint(process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!)
.setProject(process.env.NEXT_PUBLIC_APPWRITE_PROJECT!);
const session = getCookie(c, AUTH_COOKIE);
if (!session) {
return c.json({ error: "Unauthorized" }, 401);
}
client.setSession(session);
const account = new Account(client);
const databases = new Databases(client);
const storage = new Storage(client);
const user = await account.get();
c.set("account", account);
c.set("databases", databases);
c.set("storage", storage);
c.set("user", user);
await next();
}
);