feat: 홈 일별 캘린더·시세 갱신·게시판 카테고리·약관동의·계좌 마스킹
- 홈: 6월 예산 아래 일별 수입/지출 캘린더(마우스오버/탭 시 내역 목록) - 투자: 시세 자동조회 버튼/진입 시 갱신, 보유종목 2줄 표기, 평가액 직접입력 - 게시판: 커뮤니티/짠테크 수다방/재테크 팁 분리, 사이드바 영역 구분선 - 회원가입: 이용약관·개인정보 수집 동의(필수 체크) - 보안: 계좌번호 화면 마스킹(끝 4자리+눈 토글) - 정기→고정지출, 내역/정기 라디오·sticky 저장, 태그 드래그 정렬 - fix: 모바일웹 새로고침 시 로그인 팝업(restore localStorage 우선) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+21
-12
@@ -24,26 +24,35 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
}
|
||||
|
||||
async function persist() {
|
||||
// localStorage 미러는 항상 먼저(동기) — Preferences 실패해도 토큰 유실 없음
|
||||
mirrorLocal()
|
||||
if (token.value) await Preferences.set({ key: TOKEN_KEY, value: token.value })
|
||||
else await Preferences.remove({ key: TOKEN_KEY })
|
||||
if (user.value) await Preferences.set({ key: USER_KEY, value: JSON.stringify(user.value) })
|
||||
else await Preferences.remove({ key: USER_KEY })
|
||||
try {
|
||||
if (token.value) await Preferences.set({ key: TOKEN_KEY, value: token.value })
|
||||
else await Preferences.remove({ key: TOKEN_KEY })
|
||||
if (user.value) await Preferences.set({ key: USER_KEY, value: JSON.stringify(user.value) })
|
||||
else await Preferences.remove({ key: USER_KEY })
|
||||
} catch {
|
||||
// Preferences 사용 불가(일부 모바일 웹/시크릿 모드) — localStorage 미러로 충분
|
||||
}
|
||||
}
|
||||
|
||||
// 앱/웹 시작 시 저장된 세션 복원 (자동 로그인). main.js 에서 mount 전 await.
|
||||
async function restore() {
|
||||
// 1) localStorage 우선 — 웹에서 항상 동작하고 http.js 의 토큰 소스와 동일.
|
||||
// (Preferences.get 가 모바일 웹에서 throw 해도 토큰을 잃지 않도록 먼저 읽는다)
|
||||
let t = localStorage.getItem(TOKEN_KEY) || ''
|
||||
let uRaw = localStorage.getItem(USER_KEY)
|
||||
// 2) 네이티브(Preferences)에만 있고 localStorage 에 없으면 보강. 실패해도 무시.
|
||||
try {
|
||||
const t = (await Preferences.get({ key: TOKEN_KEY })).value || localStorage.getItem(TOKEN_KEY) || ''
|
||||
const uRaw = (await Preferences.get({ key: USER_KEY })).value || localStorage.getItem(USER_KEY)
|
||||
token.value = t
|
||||
user.value = safeParse(uRaw)
|
||||
mirrorLocal()
|
||||
if (!t) t = (await Preferences.get({ key: TOKEN_KEY })).value || ''
|
||||
if (!uRaw) uRaw = (await Preferences.get({ key: USER_KEY })).value || null
|
||||
} catch {
|
||||
// 무시 — 비로그인 상태로 시작
|
||||
} finally {
|
||||
ready.value = true
|
||||
// Preferences 사용 불가(일부 모바일 웹/시크릿 모드) — localStorage 값으로 진행
|
||||
}
|
||||
token.value = t
|
||||
user.value = safeParse(uRaw)
|
||||
mirrorLocal()
|
||||
ready.value = true
|
||||
}
|
||||
|
||||
async function login(loginId, password, rememberMe = false) {
|
||||
|
||||
Reference in New Issue
Block a user