Better handling of invalid credentials on login
* Notify on page as this is more appropriate * Reset entered password
This commit is contained in:
parent
967458a51b
commit
5061d18956
|
@ -1,8 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<q-page padding class="fit row justify-center items-center content-center">
|
<q-page
|
||||||
<q-card
|
padding
|
||||||
class="col-xs-11 col-sm-8 col-md-6 col-lg-4 justify-center items-center content-center"
|
class="fit row justify-center items-center content-center"
|
||||||
>
|
>
|
||||||
|
<q-card class="col-xs-11 col-sm-8 col-md-6 col-lg-4 justify-center items-center content-center">
|
||||||
<q-toolbar class="bg-primary text-white">
|
<q-toolbar class="bg-primary text-white">
|
||||||
<q-toolbar-title>
|
<q-toolbar-title>
|
||||||
Login
|
Login
|
||||||
|
@ -10,7 +11,11 @@
|
||||||
</q-toolbar>
|
</q-toolbar>
|
||||||
|
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-form ref="LoginForm" @submit="doLogin" class="q-gutter-md">
|
<q-form
|
||||||
|
ref="LoginForm"
|
||||||
|
@submit="doLogin"
|
||||||
|
class="q-gutter-md"
|
||||||
|
>
|
||||||
<q-input
|
<q-input
|
||||||
filled
|
filled
|
||||||
v-model="userid"
|
v-model="userid"
|
||||||
|
@ -25,7 +30,11 @@
|
||||||
:rules="rules"
|
:rules="rules"
|
||||||
/>
|
/>
|
||||||
<div class="row justify-end">
|
<div class="row justify-end">
|
||||||
<q-btn label="Login" type="submit" color="primary" />
|
<q-btn
|
||||||
|
label="Login"
|
||||||
|
type="submit"
|
||||||
|
color="primary"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</q-form>
|
</q-form>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
@ -35,7 +44,7 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, ref } from '@vue/composition-api';
|
import { defineComponent, ref } from '@vue/composition-api';
|
||||||
import { Loading } from 'quasar';
|
import { Loading, Notify } from 'quasar';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
// name: 'PageName'
|
// name: 'PageName'
|
||||||
|
@ -46,17 +55,17 @@ export default defineComponent({
|
||||||
const userid = ref('');
|
const userid = ref('');
|
||||||
const password = ref('');
|
const password = ref('');
|
||||||
const rules = [
|
const rules = [
|
||||||
(val: string) => (val && val.length > 0) || 'Feld darf nicht leer sein!'
|
(val: string) => (val && val.length > 0) || 'Feld darf nicht leer sein!',
|
||||||
];
|
];
|
||||||
|
|
||||||
function doLogin() {
|
function doLogin() {
|
||||||
Loading.show({
|
Loading.show({
|
||||||
message: 'Du wirst angemeldet'
|
message: 'Du wirst angemeldet',
|
||||||
});
|
});
|
||||||
root.$store
|
root.$store
|
||||||
.dispatch('session/login', {
|
.dispatch('session/login', {
|
||||||
userid: userid.value,
|
userid: userid.value,
|
||||||
password: password.value
|
password: password.value,
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
const x = root.$route.query['redirect'];
|
const x = root.$route.query['redirect'];
|
||||||
|
@ -64,12 +73,25 @@ export default defineComponent({
|
||||||
typeof x === 'string' ? { path: x } : mainRoute
|
typeof x === 'string' ? { path: x } : mainRoute
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
.catch((error: { status: number } | undefined) => {
|
||||||
|
if (error && error.status === 401) {
|
||||||
|
password.value = '';
|
||||||
|
Notify.create({
|
||||||
|
group: false,
|
||||||
|
type: 'negative',
|
||||||
|
message: 'Benutzername oder Passwort sind falsch.',
|
||||||
|
timeout: 10000,
|
||||||
|
progress: true,
|
||||||
|
actions: [{ icon: 'mdi-close', color: 'white' }],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
Loading.hide();
|
Loading.hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return { userid, password, doLogin, rules };
|
return { userid, password, doLogin, rules };
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -2,9 +2,11 @@
|
||||||
<q-card style="text-align: center;">
|
<q-card style="text-align: center;">
|
||||||
<q-card-section class="row justify-center content-stretch">
|
<q-card-section class="row justify-center content-stretch">
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<q-avatar style="width: 100%; height: auto;">
|
<div style="width: 100%; padding-bottom: 100%; position: relative;">
|
||||||
<img :src="avatarLink" />
|
<q-avatar style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;">
|
||||||
</q-avatar>
|
<img :src="avatarLink" />
|
||||||
|
</q-avatar>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<span class="text-h6">Hallo {{ name }}</span><br />
|
<span class="text-h6">Hallo {{ name }}</span><br />
|
||||||
|
|
|
@ -5,7 +5,6 @@ import { axios } from 'src/boot/axios';
|
||||||
import { AxiosError, AxiosResponse } from 'axios';
|
import { AxiosError, AxiosResponse } from 'axios';
|
||||||
import { Router } from 'src/router';
|
import { Router } from 'src/router';
|
||||||
import { LocalStorage } from 'quasar';
|
import { LocalStorage } from 'quasar';
|
||||||
import { Notify } from 'quasar';
|
|
||||||
|
|
||||||
export interface SessionInterface {
|
export interface SessionInterface {
|
||||||
currentSession?: FG.Session;
|
currentSession?: FG.Session;
|
||||||
|
@ -64,15 +63,6 @@ const actions: ActionTree<SessionInterface, StateInterface> = {
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.catch((error: AxiosError) => {
|
.catch((error: AxiosError) => {
|
||||||
if (error.response && error.response.status === 401)
|
|
||||||
Notify.create({
|
|
||||||
group: false,
|
|
||||||
type: 'negative',
|
|
||||||
message: 'Benutzername oder Passwort sind falsch.',
|
|
||||||
timeout: 10000,
|
|
||||||
progress: true,
|
|
||||||
actions: [{ icon: 'mdi-close', color: 'white' }]
|
|
||||||
});
|
|
||||||
return Promise.reject(error.response);
|
return Promise.reject(error.response);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue