feat(auth): display message on login when token expires
This commit is contained in:
parent
75aa2abef7
commit
03664c61ba
@ -45,6 +45,15 @@
|
|||||||
animation: 0.2s opac forwards;
|
animation: 0.2s opac forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#login .logout-message {
|
||||||
|
background: var(--icon-orange);
|
||||||
|
color: #fff;
|
||||||
|
padding: 0.5em;
|
||||||
|
text-align: center;
|
||||||
|
animation: 0.2s opac forwards;
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes opac {
|
@keyframes opac {
|
||||||
0% {
|
0% {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
|
|||||||
@ -101,7 +101,10 @@
|
|||||||
"submit": "Login",
|
"submit": "Login",
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"usernameTaken": "Username already taken",
|
"usernameTaken": "Username already taken",
|
||||||
"wrongCredentials": "Wrong credentials"
|
"wrongCredentials": "Wrong credentials",
|
||||||
|
"logout_reasons": {
|
||||||
|
"inactivity": "You have been logged out due to inactivity."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"permanent": "Permanent",
|
"permanent": "Permanent",
|
||||||
"prompts": {
|
"prompts": {
|
||||||
|
|||||||
@ -24,7 +24,7 @@ export function parseToken(token: string) {
|
|||||||
const expiresAt = new Date(data.exp! * 1000);
|
const expiresAt = new Date(data.exp! * 1000);
|
||||||
authStore.setLogoutTimer(
|
authStore.setLogoutTimer(
|
||||||
window.setTimeout(() => {
|
window.setTimeout(() => {
|
||||||
logout();
|
logout('inactivity');
|
||||||
}, expiresAt.getTime() - Date.now())
|
}, expiresAt.getTime() - Date.now())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -103,7 +103,7 @@ export async function signup(username: string, password: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function logout() {
|
export function logout(reason?: string) {
|
||||||
document.cookie = "auth=; Max-Age=0; Path=/; SameSite=Strict;";
|
document.cookie = "auth=; Max-Age=0; Path=/; SameSite=Strict;";
|
||||||
|
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
@ -113,6 +113,16 @@ export function logout() {
|
|||||||
if (noAuth) {
|
if (noAuth) {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
} else {
|
} else {
|
||||||
router.push({ path: "/login" });
|
if(typeof reason === "string" && reason.trim() !== "") {
|
||||||
|
router.push({
|
||||||
|
path: "/login",
|
||||||
|
query: { "logout-reason": reason }
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
router.push({
|
||||||
|
path: "/login",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
<form @submit="submit">
|
<form @submit="submit">
|
||||||
<img :src="logoURL" alt="File Browser" />
|
<img :src="logoURL" alt="File Browser" />
|
||||||
<h1>{{ name }}</h1>
|
<h1>{{ name }}</h1>
|
||||||
|
<p v-if="reason != null" class="logout-message">{{t(`login.logout_reasons.${reason}`)}}</p>
|
||||||
<div v-if="error !== ''" class="wrong">{{ error }}</div>
|
<div v-if="error !== ''" class="wrong">{{ error }}</div>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
@ -70,6 +71,8 @@ const toggleMode = () => (createMode.value = !createMode.value);
|
|||||||
|
|
||||||
const $showError = inject<IToastError>("$showError")!;
|
const $showError = inject<IToastError>("$showError")!;
|
||||||
|
|
||||||
|
const reason = route.query['logout-reason'] ?? null;
|
||||||
|
|
||||||
const submit = async (event: Event) => {
|
const submit = async (event: Event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user