💾 login state preserve (localstorage) + ℹ JWT payload parsing

ref #8
This commit is contained in:
Philipp Dormann 2020-12-30 19:55:57 +01:00
parent 51c18e03a7
commit 13ccb56354
4 changed files with 38 additions and 7 deletions

View File

@ -6,9 +6,10 @@
"build": "snowpack build"
},
"dependencies": {
"@odit/lfk-client-js": "^0.0.5",
"@odit/lfk-client-js": "0.0.6",
"filepond": "^4.25.1",
"gridjs": "^3.2.0",
"localforage": "^1.9.0",
"svelte-filepond": "^0.0.1",
"svelte-i18n": "^3.3.0",
"svelte-spa-router": "^3.1.0",

View File

@ -3,6 +3,7 @@
import Router from "svelte-spa-router";
import { replace } from "svelte-spa-router";
import { wrap } from "svelte-spa-router/wrap";
import localForage from "localforage";
import { addMessages, init, getLocaleFromNavigator } from "svelte-i18n";
import en from "./locales/en.json";
import de from "./locales/de.json";
@ -12,6 +13,12 @@
fallbackLocale: "en",
initialLocale: getLocaleFromNavigator(),
});
localForage.config({
name: "lfk_admin",
version: 1.0,
storeName: "lfk_admin",
description: "LfK! admin dashbaord",
});
//
import Login from "./components/Login.svelte";
import Dashboard from "./components/Dashboard.svelte";

View File

@ -1,5 +1,6 @@
<script>
import store from "../store.js";
import localForage from "localforage";
import { _ } from "svelte-i18n";
store.init();
import { push, pop, replace } from "svelte-spa-router";
@ -7,14 +8,32 @@
OpenAPI.BASE = config.baseurl;
import Toastify from "toastify-js";
import "toastify-js/src/toastify.css";
import { init } from "svelte/internal";
// ------
let usersUsername;
let usersPassword = "";
let is_blocked_by_autologin = false;
let last_loginclick_processed = true;
localForage.getItem("logindata", (err, value) => {
if (value) {
if (value.access_token && value.refresh_token) {
is_blocked_by_autologin = true;
OpenAPI.TOKEN = value.access_token;
const jwtinfo = JSON.parse(atob(OpenAPI.TOKEN.split(".")[1]));
store.login(value.access_token, jwtinfo);
replace("/dashboard/");
Toastify({
text: $_("welcome_wavinghand"),
duration: 500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast();
}
}
});
const login = async () => {
// prevent login button spamming
if (last_loginclick_processed) {
if (last_loginclick_processed && is_blocked_by_autologin === false) {
last_loginclick_processed = false;
Toastify({
text: $_("login_is_checked"),
@ -32,9 +51,11 @@
username,
password,
})
.then((result) => {
.then(async (result) => {
await localForage.setItem("logindata", result);
OpenAPI.TOKEN = result.access_token;
store.login(result.access_token);
const jwtinfo = JSON.parse(atob(OpenAPI.TOKEN.split(".")[1]));
store.login(result.access_token, jwtinfo);
replace("/dashboard/");
Toastify({
text: $_("welcome_wavinghand"),

View File

@ -3,6 +3,7 @@ import { writable } from 'svelte/store';
const store = () => {
const state = {
access_token: undefined,
jwtinfo: undefined,
isLoggedIn: false
};
@ -16,10 +17,10 @@ const store = () => {
return state;
});
},
login(access_token) {
login(access_token, jwtinfo) {
update((state) => {
state.access_token = access_token;
state.jwtinfo = jwtinfo;
state.isLoggedIn = true;
console.log('login performed');
return state;
@ -37,6 +38,7 @@ const store = () => {
subscribe,
set,
update,
state,
...methods
};
};