72 lines
1.4 KiB
JavaScript
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,
|
|
};
|
|
});
|