34 lines
891 B
TypeScript
34 lines
891 B
TypeScript
import { getIronSession } from 'iron-session';
|
|
import { cookies } from 'next/headers';
|
|
import { SessionData, sessionOptions } from '@/lib/session/config';
|
|
import { redirect } from 'next/navigation';
|
|
|
|
export async function getSession() {
|
|
const session = await getIronSession<SessionData>(await cookies(), sessionOptions);
|
|
return session;
|
|
}
|
|
|
|
export async function requireAuth(skipRedirect?: boolean) {
|
|
const session = await getSession();
|
|
|
|
if (!skipRedirect && (!session.token || !session.user)) {
|
|
session.destroy();
|
|
redirect('/login');
|
|
}
|
|
|
|
return session;
|
|
}
|
|
|
|
export async function login(token: string, user: SessionData['user'], openToken?: string) {
|
|
const session = await getSession();
|
|
session.token = token;
|
|
session.user = user;
|
|
session.openToken = openToken;
|
|
await session.save();
|
|
}
|
|
|
|
export async function logout() {
|
|
const session = await getSession();
|
|
session.destroy();
|
|
}
|