vuetify-admin
Version:
SPA admin framework for Vue.js running on top of REST APIs, built on Vuetify
87 lines (84 loc) • 2.2 kB
JavaScript
import {
LOGIN,
LOGOUT,
CHECK_AUTH,
CHECK_ERROR,
GET_NAME,
GET_EMAIL,
GET_PERMISSIONS,
} from "../providers/auth/actions";
export default (provider, router) => {
return {
namespaced: true,
state: { user: null },
mutations: {
setUser(state, user) {
state.user = user;
},
},
getters: {
[](state) {
if (state.user && provider[GET_NAME]) {
return provider[GET_NAME](state.user);
}
},
[](state) {
if (state.user && provider[GET_EMAIL]) {
return provider[GET_EMAIL](state.user);
}
},
[](state) {
if (state.user && provider[GET_PERMISSIONS]) {
return provider[GET_PERMISSIONS](state.user) || [];
}
return [];
},
},
actions: {
/**
* Server login with given credentials
* checkAuth action will set fresh user infos on store automatically
*/
// eslint-disable-next-line no-empty-pattern
[]: async ({}, credentials) => {
await provider[LOGIN](credentials);
router.push({ name: "dashboard" });
},
/**
* Explicit logout action, remove user from storage
*/
[]: async () => {
await provider[LOGOUT]();
router.push({ name: "login" });
},
/**
* Check valid auth on target route server by retrieving user infos
* Set fresh user infos on store
* Called after each URL navigation
*/
[]: async ({ commit }) => {
try {
let response = await provider[CHECK_AUTH]();
if (response) {
commit("setUser", response.data);
}
return response.data;
} catch (e) {
commit("setUser", null);
}
},
/**
* Check API error status
* Called after each API error (4xx, 5xx)
* Do automatic logout if reject promise returned
*/
[]: async ({ dispatch }, error) => {
try {
await provider[CHECK_ERROR](error);
} catch (e) {
dispatch("logout");
}
},
},
};
};