web: Fix login session persistence using localStorage.

This commit is contained in:
2019-04-10 10:48:26 -05:00
parent d7387d699d
commit 3154d97dd1
4 changed files with 79 additions and 30 deletions

View File

@ -6,9 +6,12 @@ import Measures from '@/views/Measures.vue';
import UserAccount from '@/views/UserAccount.vue';
import QuickPanels from '@/views/QuickPanels.vue';
import { authStore } from '@/store';
import { logService } from '@/services/logging';
Vue.use(Router);
const logger = logService.getLogger('/router');
const router = new Router({
mode: 'history',
base: process.env.BASE_URL,
@ -20,7 +23,8 @@ const router = new Router({
{
path: '/login',
name: 'login',
component: Login
component: Login,
props: (route) => ({ redirect: route.query.redirect })
},
{
path: '/measures',
@ -43,12 +47,26 @@ const router = new Router({
]
});
async function getAuthToken(): Promise<string | null> {
if (authStore.authToken) { return authStore.authToken; }
logger.trace('Checking for an existing API token.');
try {
const token = await authStore.findLocalToken();
return token;
}
catch (e) {
logger.info('Could not find a valid token.', e);
return null;
}
}
// Auth filter
router.beforeEach((to, from, next) => {
router.beforeEach(async (to, from, next) => {
if (to.matched.some((record) => record.meta.requiresAuth)) {
if (!authStore.authToken) {
next({ name: 'login' });
// params: { redirect: to.path } });
const token = await getAuthToken();
if (!token) {
next({ name: 'login', query: { redirect: to.path } });
} else { next(); } // if authed
} else { next(); } // if auth required
});