guardia-messenger/utils/auth.ts

37 lines
1.0 KiB
TypeScript

/**
* GUARDiA Messenger — 인증 토큰 유틸
* SecureStore에 저장된 JWT 토큰을 읽어온다. (키: grd_token)
*/
import * as SecureStore from 'expo-secure-store'
const TOKEN_KEY = 'grd_token'
const USER_KEY = 'grd_user'
export async function getToken(): Promise<string | null> {
try {
return await SecureStore.getItemAsync(TOKEN_KEY)
} catch {
return null
}
}
export async function getStoredUser<T = any>(): Promise<T | null> {
try {
const raw = await SecureStore.getItemAsync(USER_KEY)
return raw ? (JSON.parse(raw) as T) : null
} catch {
return null
}
}
/** 인증 헤더가 포함된 fetch 래퍼. */
export async function authFetch(input: string, init: RequestInit = {}): Promise<Response> {
const token = await getToken()
const headers: Record<string, string> = {
'Content-Type': 'application/json',
...(init.headers as Record<string, string> | undefined),
}
if (token) headers.Authorization = `Bearer ${token}`
return fetch(input, { ...init, headers })
}