Ausloggen jetzt möglich, Neuer Loading Spinner in 'Dark-Mode'
Beim ausloggen wird nun der localstorage geleert und ein delete an /auth/delete/<token> gesendet.
This commit is contained in:
parent
27d44b350f
commit
789cf89603
|
@ -0,0 +1,23 @@
|
|||
<template>
|
||||
<q-circular-progress
|
||||
indeterminate
|
||||
show-value
|
||||
font-size="10px"
|
||||
class="q-ma-md"
|
||||
size="80px"
|
||||
:thickness="0.15"
|
||||
color="primary"
|
||||
track-color="grey-3"
|
||||
>
|
||||
<q-avatar size="60px">
|
||||
<img src="logo.svg" />
|
||||
</q-avatar>
|
||||
</q-circular-progress>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from '@vue/composition-api';
|
||||
export default defineComponent({
|
||||
name: 'DarkCircularProgress'
|
||||
});
|
||||
</script>
|
|
@ -1,9 +1,6 @@
|
|||
<template>
|
||||
<q-layout view="hHh lpr lFf">
|
||||
<q-header
|
||||
elevated
|
||||
class="bg-primary text-white"
|
||||
>
|
||||
<q-header elevated class="bg-primary text-white">
|
||||
<q-toolbar>
|
||||
<!-- Button um Navigationsleiset ein und auszublenden. Nötig bei Desktop? -->
|
||||
<q-btn
|
||||
|
@ -33,13 +30,7 @@
|
|||
:icon="shortcut.icon"
|
||||
/>
|
||||
</div>
|
||||
<q-btn
|
||||
flat
|
||||
round
|
||||
dense
|
||||
icon="mdi-exit-to-app"
|
||||
@click="$router.push({ name: 'login' })"
|
||||
/>
|
||||
<q-btn flat round dense icon="mdi-exit-to-app" @click="logout()" />
|
||||
</q-toolbar>
|
||||
</q-header>
|
||||
|
||||
|
@ -75,10 +66,7 @@
|
|||
/>
|
||||
</q-list>
|
||||
|
||||
<div
|
||||
class="q-mini-drawer-hide absolute"
|
||||
style="top: 15px; right: -11px"
|
||||
>
|
||||
<div class="q-mini-drawer-hide absolute" style="top: 15px; right: -11px">
|
||||
<q-btn
|
||||
size="sm"
|
||||
dense
|
||||
|
@ -119,23 +107,23 @@ const links = [
|
|||
name: 'about',
|
||||
title: 'Über Flaschengeist',
|
||||
link: 'about',
|
||||
icon: 'mdi-information',
|
||||
},
|
||||
icon: 'mdi-information'
|
||||
}
|
||||
];
|
||||
|
||||
const shortcuts = [
|
||||
{
|
||||
link: 'about',
|
||||
icon: 'mdi-information',
|
||||
icon: 'mdi-information'
|
||||
},
|
||||
{
|
||||
link: 'user',
|
||||
icon: 'mdi-account',
|
||||
icon: 'mdi-account'
|
||||
},
|
||||
{
|
||||
link: 'user-plugin1',
|
||||
icon: 'mdi-account-plus',
|
||||
},
|
||||
icon: 'mdi-account-plus'
|
||||
}
|
||||
];
|
||||
|
||||
declare module 'vue/types/vue' {
|
||||
|
@ -153,7 +141,7 @@ export default defineComponent({
|
|||
const leftDrawerOpen = ref(
|
||||
computed({
|
||||
get: () => (leftDrawer.value || Screen.gt.sm ? true : false),
|
||||
set: (val: boolean) => (leftDrawer.value = val),
|
||||
set: (val: boolean) => (leftDrawer.value = val)
|
||||
})
|
||||
);
|
||||
const leftDrawerMini = ref(false);
|
||||
|
@ -181,6 +169,15 @@ export default defineComponent({
|
|||
}
|
||||
});
|
||||
|
||||
function logout() {
|
||||
console.log('vor dem logout');
|
||||
ctx.root.$store.dispatch(
|
||||
'user/logout',
|
||||
ctx.root.$store.getters['user/session'].token
|
||||
);
|
||||
console.log('nach dem logout');
|
||||
}
|
||||
|
||||
return {
|
||||
leftDrawerOpen,
|
||||
leftDrawerMini,
|
||||
|
@ -188,7 +185,8 @@ export default defineComponent({
|
|||
links,
|
||||
pluginChildLinks,
|
||||
shortcuts,
|
||||
logout
|
||||
};
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -5,18 +5,12 @@
|
|||
class="fit row justify-center content-center items-center"
|
||||
v-if="checkMain"
|
||||
>
|
||||
<q-card
|
||||
class="col-4"
|
||||
height=""
|
||||
>
|
||||
<q-card class="col-4" height="">
|
||||
<q-card-section>
|
||||
Name: {{ userObj.firstname }} {{ userObj.lastname }}<br />
|
||||
E-Mail: {{ userObj.mail }}<br />
|
||||
Roles:
|
||||
<ul
|
||||
v-for="role in userObj.roles"
|
||||
v-bind:key="role"
|
||||
>
|
||||
<ul v-for="(role, index) in userObj.roles" :key="'role' + index">
|
||||
<li>{{ role }}</li>
|
||||
</ul>
|
||||
<br />
|
||||
|
|
|
@ -52,7 +52,12 @@ const mutations: MutationTree<UserStateInterface> = {
|
|||
const actions: ActionTree<UserStateInterface, StateInterface> = {
|
||||
login({ commit }, data: LoginData) {
|
||||
commit('setLoginLoading', true);
|
||||
Loading.show({ message: 'Du wirst eingeloggt' });
|
||||
Loading.setDefaults({
|
||||
spinner: () => import('src/components/loading/DarkCircularProgress.vue')
|
||||
});
|
||||
Loading.show({
|
||||
message: 'Du wirst eingeloggt'
|
||||
});
|
||||
void axios
|
||||
.post('/auth', data)
|
||||
.then((response: AxiosResponse<LoginResponse>) => {
|
||||
|
@ -74,23 +79,32 @@ const actions: ActionTree<UserStateInterface, StateInterface> = {
|
|||
});
|
||||
},
|
||||
logout({ commit }, token) {
|
||||
void axios.delete(`/auth/${token}`).then(() => {
|
||||
commit('setUser', {
|
||||
display_name: '',
|
||||
firstname: '',
|
||||
lastname: '',
|
||||
mail: '',
|
||||
roles: [],
|
||||
userid: ''
|
||||
Loading.show({ message: 'Du wirst ausgeloggt' });
|
||||
void axios
|
||||
.delete(`/auth/${token}`)
|
||||
.then(() => {
|
||||
commit('setUser', {
|
||||
display_name: '',
|
||||
firstname: '',
|
||||
lastname: '',
|
||||
mail: '',
|
||||
roles: [],
|
||||
userid: ''
|
||||
});
|
||||
commit('setSession', {
|
||||
browser: '',
|
||||
expires: '',
|
||||
lifetime: '',
|
||||
platform: '',
|
||||
token: ''
|
||||
});
|
||||
})
|
||||
.finally(() => {
|
||||
LocalStorage.remove('user');
|
||||
LocalStorage.remove('session');
|
||||
void Router.push({ name: 'login' });
|
||||
Loading.hide();
|
||||
});
|
||||
commit('setSession', {
|
||||
browser: '',
|
||||
expires: '',
|
||||
lifetime: '',
|
||||
platform: '',
|
||||
token: ''
|
||||
});
|
||||
});
|
||||
},
|
||||
updateUser({ commit, getters }, data) {
|
||||
commit('setLoginLoading', true);
|
||||
|
|
Loading…
Reference in New Issue