changeset 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 a85c44438d48
children 3d9341f6da4e
files client/src/components/Sidebar.vue client/src/stores/user.js client/src/views/Login.vue
diffstat 3 files changed, 25 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/client/src/components/Sidebar.vue	Tue Jul 03 11:43:55 2018 +0200
+++ b/client/src/components/Sidebar.vue	Tue Jul 03 16:18:29 2018 +0200
@@ -6,13 +6,19 @@
       <a class="nav-link" href="#">Link</a>
       <a class="nav-link disabled" href="#">Disabled</a>
     </nav>
+    <div class="userinfo">
+      {{ userinfo }}
+    </div>
   </div>
 </template>
 
 <script>
+import { mapGetters } from "vuex";
+
 export default {
   name: "sidebar",
   computed: {
+    ...mapGetters("user", ["userinfo"]),
     sidebarStyle() {
       return {
         sidebarcollapsed: this.collapsed,
--- a/client/src/stores/user.js	Tue Jul 03 11:43:55 2018 +0200
+++ b/client/src/stores/user.js	Tue Jul 03 16:18:29 2018 +0200
@@ -3,16 +3,26 @@
 const User = {
   namespaced: true,
   state: {
-    authenticated: false
+    user: "",
+    authenticated: false,
+    expires: null,
+    roles: []
   },
   getters: {
     authenticated: state => {
       return state.authenticated;
+    },
+    userinfo: state => {
+      return state.user;
     }
   },
   mutations: {
-    auth_success: (state, token) => {
+    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 => {
@@ -23,10 +33,9 @@
   actions: {
     login({ commit }, user) {
       return new Promise((resolve, reject) => {
-        HTTP.post("/token", user)
+        HTTP.get("/token", { params: user })
           .then(response => {
-            let token = response.data;
-            commit("auth_success", token);
+            commit("auth_success", response.data);
             resolve(response);
           })
           .catch(error => {
--- a/client/src/views/Login.vue	Tue Jul 03 11:43:55 2018 +0200
+++ b/client/src/views/Login.vue	Tue Jul 03 16:18:29 2018 +0200
@@ -12,10 +12,10 @@
              <span class="loginerror"><translate>Login failed</translate></span>
            </div>
         <div class="input-group mb-3 emailgroup">
-          <input type="text" v-model="username" id="inputEmail" class="form-control" :placeholder="emailLabel" required autofocus>
+          <input type="text" v-model="user" id="inputEmail" class="form-control" :placeholder="emailLabel" required autofocus>
         </div>
         <div class="input-group mb-3 passwordgroup">
-          <input :type="isPasswordVisible" v-model="password" id="inputPassword" class="form-control" :placeholder="passwordLabel" required>
+          <input :type="isPasswordVisible" v-model="password" id="inputPassword" class="form-control" :placeholder='passwordLabel' required>
           <div class="input-group-append">
             <span class="input-group-text" id="basic-addon2" @click="showPassword"><i :class="eyeIcon"></i></span>
           </div>
@@ -103,7 +103,7 @@
   name: "login",
   data() {
     return {
-      username: "",
+      user: "",
       password: "",
       submitted: false,
       loginFailed: false,
@@ -141,9 +141,9 @@
   methods: {
     login() {
       this.submitted = true;
-      const { username, password } = this;
+      const { user, password } = this;
       this.$store
-        .dispatch("user/login", { username, password })
+        .dispatch("user/login", { user, password })
         .then(() => {
           this.loginFailed = false;
           this.$router.push("/");