Merge pull request 'feature/8-login-preserve' (#19) from feature/8-login-preserve into develop
Reviewed-on: #19 close #8
This commit is contained in:
commit
725edfbb19
@ -6,9 +6,10 @@
|
|||||||
"build": "snowpack build"
|
"build": "snowpack build"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@odit/lfk-client-js": "^0.0.5",
|
"@odit/lfk-client-js": "0.0.6",
|
||||||
"filepond": "^4.25.1",
|
"filepond": "^4.25.1",
|
||||||
"gridjs": "^3.2.0",
|
"gridjs": "^3.2.0",
|
||||||
|
"localforage": "^1.9.0",
|
||||||
"svelte-filepond": "^0.0.1",
|
"svelte-filepond": "^0.0.1",
|
||||||
"svelte-i18n": "^3.3.0",
|
"svelte-i18n": "^3.3.0",
|
||||||
"svelte-spa-router": "^3.1.0",
|
"svelte-spa-router": "^3.1.0",
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
import Router from "svelte-spa-router";
|
import Router from "svelte-spa-router";
|
||||||
import { replace } from "svelte-spa-router";
|
import { replace } from "svelte-spa-router";
|
||||||
import { wrap } from "svelte-spa-router/wrap";
|
import { wrap } from "svelte-spa-router/wrap";
|
||||||
|
import localForage from "localforage";
|
||||||
import { addMessages, init, getLocaleFromNavigator } from "svelte-i18n";
|
import { addMessages, init, getLocaleFromNavigator } from "svelte-i18n";
|
||||||
import en from "./locales/en.json";
|
import en from "./locales/en.json";
|
||||||
import de from "./locales/de.json";
|
import de from "./locales/de.json";
|
||||||
@ -12,6 +13,12 @@
|
|||||||
fallbackLocale: "en",
|
fallbackLocale: "en",
|
||||||
initialLocale: getLocaleFromNavigator(),
|
initialLocale: getLocaleFromNavigator(),
|
||||||
});
|
});
|
||||||
|
localForage.config({
|
||||||
|
name: "lfk_admin",
|
||||||
|
version: 1.0,
|
||||||
|
storeName: "lfk_admin",
|
||||||
|
description: "LfK! admin dashbaord",
|
||||||
|
});
|
||||||
//
|
//
|
||||||
import Login from "./components/Login.svelte";
|
import Login from "./components/Login.svelte";
|
||||||
import Dashboard from "./components/Dashboard.svelte";
|
import Dashboard from "./components/Dashboard.svelte";
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
import Tags from "./Tags.svelte";
|
import Tags from "./Tags.svelte";
|
||||||
import Badges from "./Badges.svelte";
|
import Badges from "./Badges.svelte";
|
||||||
import Avatars from "./Avatars.svelte";
|
import Avatars from "./Avatars.svelte";
|
||||||
|
import store from "../store";
|
||||||
|
|
||||||
let activePage = "dashboard";
|
let activePage = "dashboard";
|
||||||
let dropdown1 = false;
|
let dropdown1 = false;
|
||||||
@ -267,7 +268,7 @@
|
|||||||
<!-- Add content here, remove div below -->
|
<!-- Add content here, remove div below -->
|
||||||
<!-- <div class="border-4 border-dashed rounded h-96" /> -->
|
<!-- <div class="border-4 border-dashed rounded h-96" /> -->
|
||||||
<h1 class="text-3xl leading-tight">
|
<h1 class="text-3xl leading-tight">
|
||||||
<span class="font-bold">Dashboard</span><span> - hello there 👋</span>
|
<span class="font-bold">Dashboard</span><span> - hello there, <span class="text-blue-500">{store.state.jwtinfo.userdetails.firstname}</span> 👋</span>
|
||||||
</h1>
|
</h1>
|
||||||
<div class="shadow px-6 pt-4 pb-1">
|
<div class="shadow px-6 pt-4 pb-1">
|
||||||
<BreadcrumbNav />
|
<BreadcrumbNav />
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import store from "../store.js";
|
import store from "../store.js";
|
||||||
|
import localForage from "localforage";
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
store.init();
|
store.init();
|
||||||
import { push, pop, replace } from "svelte-spa-router";
|
import { push, pop, replace } from "svelte-spa-router";
|
||||||
@ -7,14 +8,32 @@
|
|||||||
OpenAPI.BASE = config.baseurl;
|
OpenAPI.BASE = config.baseurl;
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import "toastify-js/src/toastify.css";
|
import "toastify-js/src/toastify.css";
|
||||||
import { init } from "svelte/internal";
|
// ------
|
||||||
let usersUsername;
|
let usersUsername;
|
||||||
let usersPassword = "";
|
let usersPassword = "";
|
||||||
|
let is_blocked_by_autologin = false;
|
||||||
let last_loginclick_processed = true;
|
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 () => {
|
const login = async () => {
|
||||||
// prevent login button spamming
|
// prevent login button spamming
|
||||||
if (last_loginclick_processed) {
|
if (last_loginclick_processed && is_blocked_by_autologin === false) {
|
||||||
last_loginclick_processed = false;
|
last_loginclick_processed = false;
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_("login_is_checked"),
|
text: $_("login_is_checked"),
|
||||||
@ -32,9 +51,11 @@
|
|||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
})
|
})
|
||||||
.then((result) => {
|
.then(async (result) => {
|
||||||
|
await localForage.setItem("logindata", result);
|
||||||
OpenAPI.TOKEN = result.access_token;
|
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/");
|
replace("/dashboard/");
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_("welcome_wavinghand"),
|
text: $_("welcome_wavinghand"),
|
||||||
|
@ -3,6 +3,7 @@ import { writable } from 'svelte/store';
|
|||||||
const store = () => {
|
const store = () => {
|
||||||
const state = {
|
const state = {
|
||||||
access_token: undefined,
|
access_token: undefined,
|
||||||
|
jwtinfo: undefined,
|
||||||
isLoggedIn: false
|
isLoggedIn: false
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -16,10 +17,10 @@ const store = () => {
|
|||||||
return state;
|
return state;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
login(access_token, jwtinfo) {
|
||||||
login(access_token) {
|
|
||||||
update((state) => {
|
update((state) => {
|
||||||
state.access_token = access_token;
|
state.access_token = access_token;
|
||||||
|
state.jwtinfo = jwtinfo;
|
||||||
state.isLoggedIn = true;
|
state.isLoggedIn = true;
|
||||||
console.log('login performed');
|
console.log('login performed');
|
||||||
return state;
|
return state;
|
||||||
@ -37,6 +38,7 @@ const store = () => {
|
|||||||
subscribe,
|
subscribe,
|
||||||
set,
|
set,
|
||||||
update,
|
update,
|
||||||
|
state,
|
||||||
...methods
|
...methods
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user