From 015d67cf738e4ad6d397824dc09a44d85d643b75 Mon Sep 17 00:00:00 2001 From: Mateja Date: Thu, 29 Jul 2021 02:46:33 +0200 Subject: Fully implement client-side login system... --- client/src/store/index.js | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'client/src/store') diff --git a/client/src/store/index.js b/client/src/store/index.js index ff4648f..47f8f47 100644 --- a/client/src/store/index.js +++ b/client/src/store/index.js @@ -5,7 +5,9 @@ export default createStore({ state: { products: [], currentProduct: {}, - cart: [] + cart: [], + token: localStorage.getItem('token') || '', + isAdmin: localStorage.getItem('isAdmin') === 'true' }, getters: { getProducts(state) { @@ -37,6 +39,12 @@ export default createStore({ amount = x.quantity; }); return amount; + }, + isLoggedIn(state) { + return !!state.token; + }, + isAdmin(state) { + return state.isAdmin; } }, mutations: { @@ -68,6 +76,20 @@ export default createStore({ }, clearCart(state) { state.cart.length = 0; + }, + auth_set(state, token, isAdmin) { + state.token = token; + state.isAdmin = isAdmin; + localStorage.setItem('token', token); + localStorage.setItem('isAdmin', isAdmin); + axios.defaults.headers.common['Authorization'] = `Bearer ${token}`; + }, + auth_clean(state) { + state.token = null; + state.isAdmin = false; + localStorage.removeItem('token'); + localStorage.removeItem('isAdmin'); + delete axios.defaults.headers.common['Authorization']; } }, actions: { @@ -96,6 +118,26 @@ export default createStore({ .post(`${process.env.VUE_APP_ROOT_API}/transactions/capture`, {orderId}) .then(() => true) .catch(err => console.error(err)); + }, + login(context, loginData) { + return new Promise((resolve, reject) => { + axios.post(`${process.env.VUE_APP_ROOT_API}/login`, loginData) + .then(response => { + context.commit('auth_set', response.data.token, response.data.isAdmin); + resolve(response); + }) + .catch(error => reject(error)); + }); + }, + register(context, registerData) { + return new Promise((resolve, reject) => { + axios.post(`${process.env.VUE_APP_ROOT_API}/register`, registerData) + .then(response => { + context.commit('auth_set', response.data.token, response.data.isAdmin); + resolve(response); + }) + .catch(error => reject(error)); + }); } }, modules: { -- cgit v1.2.3