37 lines
1.0 KiB
TypeScript
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 })
|
|
}
|