45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { SignJWT, jwtVerify } from 'jose';
|
|
import { cookies } from 'next/headers';
|
|
|
|
const secretKey = process.env.JWT_SECRET || 'fallback-secret-for-development-only-do-not-use-in-prod';
|
|
const key = new TextEncoder().encode(secretKey);
|
|
|
|
export async function signToken(payload: any) {
|
|
return await new SignJWT(payload)
|
|
.setProtectedHeader({ alg: 'HS256' })
|
|
.setIssuedAt()
|
|
.setExpirationTime('1d') // 1 günlük oturum süresi
|
|
.sign(key);
|
|
}
|
|
|
|
export async function verifyToken(token: string) {
|
|
try {
|
|
const { payload } = await jwtVerify(token, key);
|
|
return payload;
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export async function setAuthCookie(token: string) {
|
|
const cookieStore = await cookies();
|
|
cookieStore.set('admin_token', token, {
|
|
httpOnly: true,
|
|
secure: process.env.NODE_ENV === 'production',
|
|
sameSite: 'lax',
|
|
maxAge: 60 * 60 * 24, // 1 day in seconds
|
|
path: '/',
|
|
});
|
|
}
|
|
|
|
export async function removeAuthCookie() {
|
|
const cookieStore = await cookies();
|
|
cookieStore.delete('admin_token');
|
|
}
|
|
|
|
export async function getAuthCookie() {
|
|
const cookieStore = await cookies();
|
|
const token = cookieStore.get('admin_token')?.value;
|
|
return token ? await verifyToken(token) : null;
|
|
}
|