42 lines
1.0 KiB
JavaScript
42 lines
1.0 KiB
JavaScript
import { defineStore } from "pinia";
|
|
|
|
export const useAuthStore = defineStore("authStore", () => {
|
|
const token = useCookie("auth_token", { maxAge: 60 * 15 });
|
|
const user = useCookie("auth_user", { maxAge: 60 * 15 });
|
|
|
|
if (process.client) {
|
|
token.value = localStorage.getItem("auth_token");
|
|
|
|
const savedUser = localStorage.getItem("auth_user");
|
|
if (savedUser) {
|
|
try {
|
|
user.value = JSON.parse(savedUser);
|
|
} catch (e) {
|
|
console.error("Failed to parse user from storage", e);
|
|
}
|
|
}
|
|
}
|
|
|
|
watch([token, user], ([newToken, newUser]) => {
|
|
if (!process.client) return;
|
|
|
|
if (newToken) {
|
|
localStorage.setItem("auth_token", newToken);
|
|
} else {
|
|
localStorage.removeItem("auth_token");
|
|
}
|
|
|
|
if (newUser) {
|
|
localStorage.setItem("auth_user", JSON.stringify(newUser));
|
|
} else {
|
|
localStorage.removeItem("auth_user");
|
|
}
|
|
}, { deep: true });
|
|
|
|
function logout() {
|
|
token.value = null;
|
|
user.value = null;
|
|
}
|
|
|
|
return { token, user, logout };
|
|
}); |