web: Fix login session persistence using localStorage.
This commit is contained in:
@ -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
|
||||
});
|
||||
|
Reference in New Issue
Block a user