diff --git a/frontend/package.json b/frontend/package.json
index e657774de9bfafaaaf987fd6ad46799fa65c1307..9a8b2be5838dca92a043717b4fb8e678d35a8756 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -16,7 +16,7 @@
     "axios": "^0.17.0",
     "vue": "^2.5.2",
     "vue-router": "^3.0.1",
-    "vuetify": "^0.16.9",
+    "vuetify": "^0.17.3",
     "vuex": "^3.0.1"
   },
   "devDependencies": {
diff --git a/frontend/src/components/Login.vue b/frontend/src/components/Login.vue
index 22dd0f091e66c39bb1cb8f73ac2ed657f1f7e970..fddc17eecc103aa5bac87342fbd1e78fb165eca7 100644
--- a/frontend/src/components/Login.vue
+++ b/frontend/src/components/Login.vue
@@ -4,20 +4,30 @@
           <v-flex text-xs-center md4 lg2>
             <img src="../assets/brand.png"/>
             <h3 class="pt-3">Log in</h3>
-            <p>But I corrected them, sir.</p>
-
-            <v-form>
+            <v-alert
+              outline
+              v-if="error"
+              color="error"
+              :value="true"
+              transition="fade-transition"
+            >{{ error }}</v-alert>
+            <p v-else>But I corrected them, sir.</p>
+            <v-form
+              @submit="submit">
               <v-text-field
                 label="Username"
                 v-model="credentials.username"
-                required></v-text-field>
+                required
+                autofocus
+                ></v-text-field>
               <v-text-field
                 label="Password"
                 v-model="credentials.password"
                 type="password"
-                required></v-text-field>
+                required
+                ></v-text-field>
+              <v-btn type="submit" color="primary">Access</v-btn>
             </v-form>
-            <v-btn color="primary" @click="submit()">Access</v-btn>
           </v-flex>
         </v-layout>
       </v-container>
@@ -38,12 +48,10 @@
     },
     methods: {
       submit () {
-        const credentials = {
-          username: this.credentials.username,
-          password: this.credentials.password
-        }
-        this.$store.dispatch('getToken', credentials).then(response => {
+        this.$store.dispatch('getJWTToken', this.credentials).then(response => {
           this.$router.push('/reviewer/')
+        }).catch(_ => {
+          this.error = this.$store.state.error
         })
       }
     }
diff --git a/frontend/src/store/store.js b/frontend/src/store/store.js
index 150521a07241ce031fa1bd5454e3ba7a9e9f963f..3eb032bf8effaf4fb5e4e2e69237d1c74fb588b7 100644
--- a/frontend/src/store/store.js
+++ b/frontend/src/store/store.js
@@ -8,9 +8,13 @@ const store = new Vuex.Store({
   state: {
     token: '',
     loggedIn: false,
-    username: ''
+    username: '',
+    error: ''
   },
   mutations: {
+    'API_FAIL': function (state, error) {
+      state.error = error
+    },
     'LOGIN': function (state, creds) {
       state.token = creds.token
       state.loggedIn = true
@@ -22,13 +26,24 @@ const store = new Vuex.Store({
     }
   },
   actions: {
-    async getToken (store, credentials) {
-      const response = await ax.post('api-token-auth/', credentials)
-      store.commit('LOGIN', {
-        token: response.data.token,
-        username: credentials.username
-      })
-      ax.defaults.headers.common['Authorization'] = 'JWT ' + response.data.token
+    async getJWTToken (context, credentials) {
+      try {
+        const response = await ax.post('api-token-auth/', credentials)
+        context.commit('LOGIN', {
+          token: response.data.token,
+          username: credentials.username
+        })
+      } catch (error) {
+        if (error.response) {
+          const errorMsg = 'Unable to log in with provided credentials.'
+          context.commit('API_FAIL', errorMsg)
+          throw errorMsg
+        } else {
+          const errorMsg = 'Cannot reach server.'
+          context.commit('API_FAIL', errorMsg)
+          throw errorMsg
+        }
+      }
     },
     logout (store) {
       store.commit('LOGOUT')
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index a73065fa651effc5cd424b1f4e3d89efebdb00a9..7fac4471d3aef38b2a829c2ace79c724663298f8 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -5842,9 +5842,9 @@ vue@^2.5.2:
   version "2.5.3"
   resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.3.tgz#e1a3b1f49b6e93e574ce040b95cbc873912fecc1"
 
-vuetify@^0.16.9:
-  version "0.16.9"
-  resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-0.16.9.tgz#fd61f219e4a40d7afe5e24a803df5658a40b38e4"
+vuetify@^0.17.3:
+  version "0.17.3"
+  resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-0.17.3.tgz#66280c5532b12d80c0ce75f4574d1d5a8c2955b9"
 
 vuex@^3.0.1:
   version "3.0.1"