view client/src/stores/user.js @ 158:992e17912405

feat: Improve login against real db In order to log into our real db, we need to consume the new JSON document consuming experies, username, roles, etc. Token is stored securly in browser session. Other data is stored in vue store.
author Thomas Junk <thomas.junk@intevation.de>
date Tue, 03 Jul 2018 16:18:29 +0200
parents 88d0d60924cf
children 061209505028
line wrap: on
line source

import { HTTP } from "../lib/http";

const User = {
  namespaced: true,
  state: {
    user: "",
    authenticated: false,
    expires: null,
    roles: []
  },
  getters: {
    authenticated: state => {
      return state.authenticated;
    },
    userinfo: state => {
      return state.user;
    }
  },
  mutations: {
    auth_success: (state, data) => {
      state.authenticated = true;
      const { token, user, expires, roles } = data;
      state.user = user;
      state.expires = expires;
      state.roles = roles;
      sessionStorage.setItem("token", token);
    },
    auth_failure: state => {
      state.authenticated = false;
      sessionStorage.removeItem("token");
    }
  },
  actions: {
    login({ commit }, user) {
      return new Promise((resolve, reject) => {
        HTTP.get("/token", { params: user })
          .then(response => {
            commit("auth_success", response.data);
            resolve(response);
          })
          .catch(error => {
            commit("auth_failure");
            reject(error);
          });
      });
    }
  }
};

export default User;