diff options
Diffstat (limited to 'src/site/store/auth.js')
| -rw-r--r-- | src/site/store/auth.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/site/store/auth.js b/src/site/store/auth.js new file mode 100644 index 0000000..a62a6ec --- /dev/null +++ b/src/site/store/auth.js @@ -0,0 +1,61 @@ +/* eslint-disable no-shadow */ +// only used so I could keep the convention of naming the first param as "state" in mutations +const getDefaultState = () => ({ + loggedIn: false, + isLoading: false, + user: null, + token: null +}); + +export const state = getDefaultState; + +export const getters = { + isLoggedIn: state => state.loggedIn +}; + +export const actions = { + async verify({ commit, dispatch }) { + try { + const response = await this.$axios.$get('verify'); + commit('loginSuccess', response); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + async login({ commit, dispatch }, { username, password }) { + commit('loginRequest'); + + try { + const data = await this.$axios.$post(`auth/login`, { username, password }); + this.$axios.setToken(data.token, 'Bearer'); + + commit('setToken', data.token); + commit('loginSuccess', { token: data.token, user: data.user }); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + logout({ commit }) { + commit('logout'); + } +}; + +export const mutations = { + setToken(state, token) { + state.token = token; + }, + loginRequest(state) { + state.isLoading = true; + }, + loginSuccess(state, { user }) { + this.$cookies.set('token', state.token); + state.user = user; + state.loggedIn = true; + state.isLoading = false; + }, + logout(state) { + this.$cookies.remove('token'); + // reset state to default + Object.assign(state, getDefaultState()); + } +}; |