aboutsummaryrefslogtreecommitdiff
path: root/src/site/store/auth.js
blob: a62a6ecb6d78197026f9762046ff5ed9948dfed7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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());
	}
};