Files
web_server/nginx/vue/src/stores/auth.js
2025-12-10 04:49:51 +00:00

72 lines
1.4 KiB
JavaScript

import { defineStore } from "pinia";
import { computed, ref } from "vue";
import axios from "axios";
export const useAuthStore = defineStore("auth", () => {
const user = ref({});
checkToken();
const loggedIn = computed(() => !!user.username);
async function logOut() {
try {
const res = await axios.post("/api/auth/logout");
} catch (err) {
console.error(err);
}
user.value = {};
}
async function logIn(username, password) {
try {
const res = await axios.post("/api/auth/login", {
username,
password,
});
user.value = res.data;
} catch (err) {
console.error(err);
}
}
async function createUser(username, password) {
try {
const res = await axios.post("/api/user", {
username,
password,
});
user.value = res.data;
} catch (err) {
console.error(err);
}
}
async function refreshToken() {
try {
const res = await axios.post("/api/auth/refresh");
user.value = res.data;
} catch (err) {
console.log(err);
}
}
async function checkToken() {
try {
const res = await axios.get("/api/auth/check");
user.value = res.data;
} catch (err) {
user.value = {};
}
}
return {
user,
checkToken,
logIn,
refreshToken,
logOut,
createUser,
loggedIn,
};
});