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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
export const state = () => ({
token: localStorage.getItem("access_token") || null,
user: null,
});
export const getters = {
accessToken: (state) => {
return state.token;
},
isLogged: (state) => {
return state.token != null;
},
me: (state) => {
return state.user;
},
};
export const mutations = {
saveAccessToken: (state, value) => {
localStorage.setItem("access_token", value);
state.token = value;
},
// Remove access_token and credentials from the browser data
logout: (state) => {
localStorage.removeItem("access_token");
state.token = null;
state.user = null;
},
// Save user's informations from the endpoint `/me`
saveUserInfo: (state, data) => {
state.user = data;
},
};
export const actions = {
// Make the login and then save the credentials.
async login({ commit }, credentials) {
commit("loadingStatus", true, { root: true });
let res = { status: 0, data: null };
let api = this.$config.api;
await fetch(`${api}/v1/auth/login`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(credentials),
})
.then(async (response) => {
res.data = await response.json();
res.status = response.status;
if (res.status == 200) {
commit("saveAccessToken", res.data.access_token);
} else {
commit("logout");
}
})
.catch((e) => {
res.status = e.status;
});
commit("loadingStatus", false, { root: true });
return res;
},
// Make a signup request and then returns a dictionary with response
// status and response data
async signup({ commit }, credentials) {
commit("loadingStatus", true, { root: true });
let res = { status: 0, data: null };
let api = this.$config.api;
await fetch(`${api}/v1/auth/signup`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(credentials),
})
.then(async (response) => {
res.data = await response.json();
res.status = response.status;
if (res.status == 201) {
commit("saveAccessToken", res.data.access_token);
}
})
.catch((e) => {
res.status = e.status;
});
commit("loadingStatus", false, { root: true });
return res;
},
// Search my info
async findMe({ commit, getters }) {
commit("loadingStatus", true, { root: true });
let res = { status: 0, data: null };
let api = this.$config.api;
await fetch(`${api}/v1/users/me`, {
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${getters.accessToken}`,
},
})
.then(async (response) => {
if (response.status == 200) {
res.data = await response.json();
commit("saveUserInfo", res.data);
} else {
commit("logout");
}
})
.catch((e) => {
res.status = e.status;
});
commit("loadingStatus", false, { root: true });
return res;
},
logout({ commit }) {
commit("logout");
},
};
|