39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import type { AuthSession, AuthUser } from '#shared/types/auth';
|
|
|
|
const SAME_SITE_SETTINGS = ['strict', 'lax', 'none'] as const;
|
|
|
|
export function useAuthSession() {
|
|
const config = useRuntimeConfig().public;
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const sameSite = SAME_SITE_SETTINGS.includes(config.cookiesSameSite as any)
|
|
? (config.cookiesSameSite as (typeof SAME_SITE_SETTINGS)[number])
|
|
: 'strict';
|
|
|
|
return useCookie('auth_session', {
|
|
default: () => null as AuthSession | null,
|
|
secure: config.cookiesSecure,
|
|
sameSite,
|
|
path: '/',
|
|
httpOnly: false,
|
|
});
|
|
}
|
|
|
|
export function setAuthSession(value: {
|
|
type: 'WarrenAuth';
|
|
id: string;
|
|
user: AuthUser;
|
|
expiresAt: number;
|
|
}) {
|
|
useAuthSession().value = value;
|
|
|
|
const cookie = `authorization=WarrenAuth ${value.id}; path=/; SameSite=Lax; Secure;`;
|
|
|
|
document.cookie = cookie;
|
|
}
|
|
|
|
export function clearAuthSession() {
|
|
useAuthSession().value = null;
|
|
document.cookie = '';
|
|
}
|