flaschengeist-frontend/src/store/modules/login.js

134 lines
2.9 KiB
JavaScript

import axios from 'axios'
import router from '@/router'
import url from '@/plugins/routes'
const state = {
user: {
username: null,
accessToken: null,
group: null
},
loggingIn: false,
loginError: null
}
const mutations = {
loginStart: state => (state.loggingIn = true),
loginStop(state, errorMessage) {
state.loggingIn = false
state.loginError = errorMessage
},
updateAccessToken(state, data) {
if (typeof data === typeof '') {
data = JSON.parse(data)
}
if (data === null || data === undefined) {
state.user.username = null
state.user.accessToken = null
state.user.group = null
} else {
state.user.username = data.username
state.user.accessToken = data.accessToken
state.user.group = data.group
}
},
logout(state) {
state.user.accessToken = null
state.user.username = null
state.user.group = null
}
}
const actions = {
async doLogin({ commit }, loginData) {
commit('loginStart')
try {
const response = await axios.post(url.login, { ...loginData })
localStorage.setItem(
'user',
JSON.stringify({
username: response.data.username,
accessToken: response.data.token,
group: response.data.group
})
)
commit('loginStop', null)
commit('updateAccessToken', response.data)
if (state.user.group.includes('moneymaster')) {
router.push('/main/finanzer')
} else if (state.user.group.includes('bar')) {
router.push('/main/bar/geruecht')
} else if (state.user.group.includes('user')) {
router.push('/main/user/add')
}
} catch (err) {
commit('loginStop', err.response.data.error)
commit('updateAccessToken', {
username: null,
accessToken: null,
group: null
})
}
},
fetchAccessToken({ commit }) {
commit('updateAccessToken', localStorage.getItem('user'))
},
logout({ commit }) {
localStorage.removeItem('user')
commit('logout')
router.push('/login')
},
resetLoginError({ commit }) {
commit('loginStop')
}
}
const getters = {
getGroup: state => {
return state.user.group
},
group: state => {
return state.user.group
},
getToken: state => {
return state.user.accessToken
},
token: state => {
return state.user.accessToken
},
loginError: state => {
return state.loginError
},
isBar: state => {
try {
return state.user.group.includes('bar') ? true : false
} catch (e) {
return false
}
},
isFinanzer: state => {
try {
return state.user.group.includes('moneymaster') ? true : false
} catch (e) {
return false
}
},
isUser: state => {
try {
return state.user.group.includes('user') ? true : false
} catch (e) {
return false
}
},
isLoggedIn: state => {
return state.user.accessToken ? true : false
}
}
export default {
state,
mutations,
actions,
getters
}