import { NewUser } from "@/db/schema";import { compare, hash } from "bcryptjs";import { SignJWT, jwtVerify } from "jose";import { cookies } from "next/headers"; const key = new TextEncoder().encode(process.env.AUTH_SECRET);const SALT_ROUNDS = 10; export async function hashPassword(password: string) { return hash(password, SALT_ROUNDS);} export async function comparePasswords( plainTextPassword: string, hashedPassword: string,) { return compare(plainTextPassword, hashedPassword);} type SessionData = { user: { id: number }; expires: string;}; export async function signToken(payload: SessionData) { return await new SignJWT(payload) .setProtectedHeader({ alg: "HS256" }) .setIssuedAt() .setExpirationTime("1 day from now") .sign(key);} export async function verifyToken(input: string) { const { payload } = await jwtVerify(input, key, { algorithms: ["HS256"], }); return payload as SessionData;} export async function getSession() { const session = (await cookies()).get("session")?.value; if (!session) return null; return await verifyToken(session);} export async function setSession(user: NewUser) { const expiresInOneDay = new Date(Date.now() + 24 * 60 * 60 * 1000); const session: SessionData = { user: { id: user.id! }, expires: expiresInOneDay.toISOString(), }; const encryptedSession = await signToken(session); (await cookies()).set("session", encryptedSession, { expires: expiresInOneDay, httpOnly: true, secure: true, sameSite: "lax", });}
import { NewUser } from "@/db/schema";
import { compare, hash } from "bcryptjs";
import { SignJWT, jwtVerify } from "jose";
import { cookies } from "next/headers";
const key = new TextEncoder().encode(process.env.AUTH_SECRET);
const SALT_ROUNDS = 10;
export async function hashPassword(password: string) {
return hash(password, SALT_ROUNDS);
}
export async function comparePasswords(
plainTextPassword: string,
hashedPassword: string,
) {
return compare(plainTextPassword, hashedPassword);
}
type SessionData = {
user: { id: number };
expires: string;
};
export async function signToken(payload: SessionData) {
return await new SignJWT(payload)
.setProtectedHeader({ alg: "HS256" })
.setIssuedAt()
.setExpirationTime("1 day from now")
.sign(key);
}
export async function verifyToken(input: string) {
const { payload } = await jwtVerify(input, key, {
algorithms: ["HS256"],
});
return payload as SessionData;
}
export async function getSession() {
const session = (await cookies()).get("session")?.value;
if (!session) return null;
return await verifyToken(session);
}
export async function setSession(user: NewUser) {
const expiresInOneDay = new Date(Date.now() + 24 * 60 * 60 * 1000);
const session: SessionData = {
user: { id: user.id! },
expires: expiresInOneDay.toISOString(),
};
const encryptedSession = await signToken(session);
(await cookies()).set("session", encryptedSession, {
expires: expiresInOneDay,
httpOnly: true,
secure: true,
sameSite: "lax",
});
}