· 4 years ago · May 24, 2021, 06:24 AM
1//import global API
2import Api from "../../api/Api";
3
4const auth = {
5 //set namespace true
6 namespaced: true,
7
8 //state
9 state: {
10 //state untuk token, pakai localStorage, untuk menyimpan informasi tentang token JWT
11 token: localStorage.getItem("token") || "",
12
13 //state user, pakai localStorage, untuk menyimpan data user yang sedang login
14 user: JSON.parse(localStorage.getItem("user")) || {},
15 },
16
17 //mutations
18 mutations: {
19 //update state token dan state user dari hasil response
20 AUTH_SUCCESS(state, token, user) {
21 state.token = token; // <-- assign state token dengan response token
22 state.user = user; // <-- assign state user dengan response data user
23 },
24
25 // update state user dari hasil response register / login
26 GET_USER(state, user) {
27 state.user = user; // <-- assign state user dengan response data user
28 },
29
30 //fungsi logout
31 AUTH_LOGOUT(state) {
32 state.token = ""; // <-- set state token ke empty
33 state.user = {}; // <-- set state user ke empty array
34 },
35 },
36
37 //actions
38 actions: {
39 //action register
40 register({ commit }, user) {
41 //define callback promise
42 return new Promise((resolve, reject) => {
43 //send data ke server
44 Api.post("/register", {
45 //data yang dikirim ke serve untuk proses register
46 name: user.name,
47 email: user.email,
48 password: user.password,
49 password_confirmation: user.password_confirmation,
50 })
51
52 .then((response) => {
53 //define variable dengan isi hasil response dari server
54 const token = response.data.token;
55 const user = response.data.user;
56
57 //set localStorage untuk menyimpan token dan data user
58 localStorage.setItem("token", token);
59 localStorage.setItem("user", JSON.stringify(user));
60
61 //set default header axios dengan token
62 Api.defaults.headers.common["Authorization"] = "Bearer " + token;
63
64 //commit auth success ke mutation
65 commit("AUTH_SUCCESS", token, user);
66
67 //resolve ke component dengan hasil response
68 resolve(response);
69 })
70 .catch((error) => {
71 //jika gagal, remove localStorage dengan key token
72 localStorage.removeItem("token");
73
74 //reject ke component dengan hasil response
75 reject(error.response.data);
76 });
77 });
78 },
79 },
80 // action getUser
81 getUser({ commit }) {
82 // ambil data token dari localStorage
83 const token = localStorage.getItem("token");
84
85 Api.defaults.headers.common["Authorization"] = "Bearer " + token;
86 Api.get("/user").then((response) => {
87 // commit ke mutation GET_USER dengan hasil response
88 commit("GET_USER", response.data.user);
89 });
90 },
91
92 //action logout
93 logout({ commit }) {
94 //define callback promise
95 return new Promise((resolve) => {
96 //commit ke mutation AUTH_LOGOUT
97 commit("AUTH_LOGOUT");
98
99 //remove value dari localStorage
100 localStorage.removeItem("token");
101 localStorage.removeItem("user");
102
103 //delete header axios
104 delete Api.defaults.headers.common["Authorization"];
105
106 //return resolve ke component
107 resolve();
108 });
109 },
110
111 //getters
112 getters: {
113 // get current user
114 currentUser(state) {
115 return state.user; //return dengan data user
116 },
117
118 // LoggedIn
119 isLoggedIn(state) {
120 return state.token; //return dengan data token
121 },
122 },
123};
124
125export default auth;
126