fix: refresh uploads and remember login
This commit is contained in:
+24
-10
@@ -6,38 +6,51 @@ import type { AuthenticatedUser, LoginResponse } from "@/types";
|
||||
const USER_STORAGE_KEY = "live-recorder-user";
|
||||
const TOKEN_STORAGE_KEY = "live-recorder-token";
|
||||
|
||||
function readStoredValue(key: string) {
|
||||
return localStorage.getItem(key) ?? sessionStorage.getItem(key);
|
||||
}
|
||||
|
||||
function clearStoredSession() {
|
||||
[localStorage, sessionStorage].forEach((storage) => {
|
||||
storage.removeItem(TOKEN_STORAGE_KEY);
|
||||
storage.removeItem(USER_STORAGE_KEY);
|
||||
});
|
||||
}
|
||||
|
||||
export const useAuthStore = defineStore("auth", () => {
|
||||
const token = ref(localStorage.getItem(TOKEN_STORAGE_KEY) ?? "");
|
||||
const token = ref(readStoredValue(TOKEN_STORAGE_KEY) ?? "");
|
||||
const user = ref<AuthenticatedUser | null>(
|
||||
(() => {
|
||||
const raw = localStorage.getItem(USER_STORAGE_KEY);
|
||||
const raw = readStoredValue(USER_STORAGE_KEY);
|
||||
return raw ? (JSON.parse(raw) as AuthenticatedUser) : null;
|
||||
})()
|
||||
);
|
||||
|
||||
const isAuthenticated = computed(() => Boolean(token.value));
|
||||
|
||||
function persistSession(session: LoginResponse) {
|
||||
function persistSession(session: LoginResponse, rememberMe: boolean) {
|
||||
token.value = session.token;
|
||||
user.value = session.user;
|
||||
localStorage.setItem(TOKEN_STORAGE_KEY, session.token);
|
||||
localStorage.setItem(USER_STORAGE_KEY, JSON.stringify(session.user));
|
||||
clearStoredSession();
|
||||
const storage = rememberMe ? localStorage : sessionStorage;
|
||||
storage.setItem(TOKEN_STORAGE_KEY, session.token);
|
||||
storage.setItem(USER_STORAGE_KEY, JSON.stringify(session.user));
|
||||
}
|
||||
|
||||
function clearSession() {
|
||||
token.value = "";
|
||||
user.value = null;
|
||||
localStorage.removeItem(TOKEN_STORAGE_KEY);
|
||||
localStorage.removeItem(USER_STORAGE_KEY);
|
||||
clearStoredSession();
|
||||
}
|
||||
|
||||
async function login(username: string, password: string) {
|
||||
async function login(username: string, password: string, rememberMe: boolean) {
|
||||
const { data } = await apiClient.post<LoginResponse>("/auth/login", {
|
||||
username,
|
||||
password
|
||||
password,
|
||||
rememberMe
|
||||
});
|
||||
|
||||
persistSession(data);
|
||||
persistSession(data, rememberMe);
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -54,6 +67,7 @@ export const useAuthStore = defineStore("auth", () => {
|
||||
currentPassword,
|
||||
newPassword
|
||||
});
|
||||
clearSession();
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user