feat/auth (#29)
Reviewed-on: #29 Co-authored-by: Janis <janis.e.20@gmx.de> Co-committed-by: Janis <janis.e.20@gmx.de>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
import LoginView from '../views/LoginView.vue'
|
||||
import RegisterView from '../views/RegisterView.vue'
|
||||
import UsernameSelectionView from '../views/UsernameSelectionView.vue'
|
||||
import MainMenuView from '../views/MainMenuView.vue'
|
||||
import createGameView from '../views/CreateGame.vue'
|
||||
import joinGameView from "@/views/JoinGameView.vue";
|
||||
@@ -17,13 +19,13 @@ const router = createRouter({
|
||||
{
|
||||
path: '/',
|
||||
component: MainMenuView,
|
||||
meta: { requiresAuth: true },
|
||||
meta: { requiresAuth: false },
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
name: 'mainmenu',
|
||||
component: defaultMenu,
|
||||
meta: { requiresAuth: true }
|
||||
meta: { requiresAuth: false }
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
@@ -41,7 +43,7 @@ const router = createRouter({
|
||||
path: 'rules',
|
||||
name: 'rules-Game',
|
||||
component: rulesView,
|
||||
meta: {requiresAuth: true }
|
||||
meta: {requiresAuth: false }
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -51,6 +53,18 @@ const router = createRouter({
|
||||
component: LoginView,
|
||||
meta: { requiresAuth: false }
|
||||
},
|
||||
{
|
||||
path: '/register',
|
||||
name: 'register',
|
||||
component: RegisterView,
|
||||
meta: { requiresAuth: false }
|
||||
},
|
||||
{
|
||||
path: '/select-username',
|
||||
name: 'select-username',
|
||||
component: UsernameSelectionView,
|
||||
meta: { requiresAuth: false }
|
||||
},
|
||||
{
|
||||
path: '/game',
|
||||
name: 'game',
|
||||
@@ -69,19 +83,16 @@ const router = createRouter({
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
const info = useUserInfo();
|
||||
const isOnline = navigator.onLine;
|
||||
|
||||
if (to.name === 'offline') {
|
||||
if (isOnline) {
|
||||
|
||||
try {
|
||||
await info.requestState();
|
||||
|
||||
if (!info.username) {
|
||||
info.clearUserInfo();
|
||||
return next('/login');
|
||||
}
|
||||
|
||||
return next({ name: 'mainmenu' });
|
||||
|
||||
} catch (err) {
|
||||
info.clearUserInfo();
|
||||
return next('/login');
|
||||
@@ -90,28 +101,27 @@ router.beforeEach(async (to, from, next) => {
|
||||
return next();
|
||||
}
|
||||
}
|
||||
|
||||
if (!isOnline) {
|
||||
return next({ name: 'offline' });
|
||||
}
|
||||
|
||||
if (!to.meta.requiresAuth) return next();
|
||||
|
||||
try {
|
||||
await info.requestState();
|
||||
|
||||
if (!info.username) {
|
||||
info.clearUserInfo();
|
||||
return next('/login');
|
||||
}
|
||||
|
||||
if (info.gameId && to.name !== 'game') {
|
||||
return next({ name: 'game' });
|
||||
}
|
||||
|
||||
next();
|
||||
} catch (err) {
|
||||
info.clearUserInfo();
|
||||
next('/login');
|
||||
|
||||
console.error("Routing Error", err);
|
||||
info.clearUserInfo();
|
||||
next('/login');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user