Files
videon-frontend/src/store/auth.js
marcsello 5a727a6872
All checks were successful
continuous-integration/drone/push Build is passing
Fixed auth
2020-12-06 02:13:13 +01:00

98 lines
2.7 KiB
JavaScript

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
const JWT_KEY_NAME = "JWT";
const baseURL = process.env.VUE_APP_API_LOCATION;
Vue.use(Vuex)
export default {
namespaced: true,
state() {
return {
processing: false,
token: localStorage.getItem(JWT_KEY_NAME) || '',
name: ''
}
},
mutations: {
auth_started(state) {
state.processing = true;
},
auth_success(state, {token, name}) {
state.processing = false;
state.token = token;
state.name = name;
},
auth_fail(state) {
state.processing = false;
state.token = '';
state.name = '';
},
logout(state) {
state.token = '';
state.name = '';
}
},
actions: {
performLogin({commit}, creds) {
return new Promise((resolve, reject) => {
commit('auth_started')
axios.post("auth/login", creds, {baseURL}).then(resp => {
const token = resp.data.token;
if (!token) {
return reject();
}
localStorage.setItem(JWT_KEY_NAME, token)
commit('auth_success', {token, name: creds.name})
return resolve(resp);
}).catch(err => {
commit('auth_fail')
localStorage.removeItem(JWT_KEY_NAME)
return reject(err);
})
})
},
performRegister({commit}, creds) {
return new Promise((resolve, reject) => {
commit('auth_started')
axios.post("auth/signup", creds, {baseURL}).then(resp => {
const token = resp.data.token;
if (!token) {
return reject();
}
localStorage.setItem(JWT_KEY_NAME, token)
commit('auth_success', {token, name: creds.name})
resolve(resp)
}).catch(err => {
commit('auth_fail')
localStorage.removeItem(JWT_KEY_NAME)
reject(err)
})
})
},
performLogout({commit}) {
return new Promise((resolve) => {
localStorage.removeItem(JWT_KEY_NAME)
commit('logout')
resolve();
});
}
},
modules: {},
getters: {
isLoggedIn(state) {
return !!state.token;
},
authInProgress(state) {
return state.processing;
}
}
}