38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
import { defineStore } from 'pinia';
|
|
|
|
import { fetchWrapper } from '@/helpers';
|
|
import { router } from '@/router';
|
|
|
|
|
|
const baseUrl = `${import.meta.env.VITE_BASE_URL}/users`;
|
|
|
|
export const useAuthStore = defineStore({
|
|
id: 'auth',
|
|
state: () => ({
|
|
// initialize state from local storage to enable user to stay logged in
|
|
user: JSON.parse(localStorage.getItem('user')),
|
|
returnUrl: null
|
|
}),
|
|
actions: {
|
|
async login(username, password) {
|
|
|
|
const user = await fetchWrapper.post(`${baseUrl}/authenticate`,
|
|
{ username, password });
|
|
|
|
// update pinia state
|
|
this.user = user;
|
|
|
|
// store user details and jwt in local storage to keep user logged in between page refreshes
|
|
localStorage.setItem('user', JSON.stringify(user));
|
|
|
|
// redirect to previous url or default to home page
|
|
router.push(this.returnUrl || '/');
|
|
|
|
},
|
|
logout() {
|
|
this.user = null;
|
|
localStorage.removeItem('user');
|
|
router.push('/account/login');
|
|
}
|
|
}
|
|
}); |