1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
import { createRouter, createWebHistory } from 'vue-router'
import axios from "axios"
import Register from '../views/Register.vue'
import LogIn from '../views/LogIn.vue'
import HomeView from '../views/HomeView.vue'
import AllBrands from '../views/AllBrands.vue'
import AllCustomers from '../views/AllCustomers.vue'
import NewCustomer from '../views/NewCustomer.vue'
import AllItems from '../views/AllItems.vue'
import NewItem from '../views/NewItem.vue'
import NewInvoice from '../views/NewInvoice.vue'
import EditInvoice from '../views/EditInvoice.vue'
import ViewInvoice from '../views/ViewInvoice.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/register',
name: 'register',
component: Register,
meta: { requiresAuth: false }
},
{
path: '/login',
name: 'log in',
component: LogIn,
meta: { requiresAuth: false }
},
{
path: '/',
name: 'home',
component: HomeView,
meta: { requiresAuth: true }
},
{
path: '/brand',
name: 'brand',
component: AllBrands,
meta: { requiresAuth: true }
},
{
path: '/customer',
name: 'customer',
component: AllCustomers,
meta: { requiresAuth: true }
},
{
path: '/customer/new',
name: 'new-customer',
component: NewCustomer,
meta: { requiresAuth: true }
},
{
path: '/item',
name: 'item',
component: AllItems,
meta: { requiresAuth: true }
},
{
path: '/item/new',
name: 'new-item',
component: NewItem,
meta: { requiresAuth: true }
},
{
path: '/invoice/new',
name: 'new-invoice',
component: NewInvoice,
meta: { requiresAuth: true }
},
{
path: '/invoice/edit/:id',
name: 'edit-invoice',
component: EditInvoice,
meta: { requiresAuth: true }
},
{
path: '/invoice/view/:id',
name: 'view-invoice',
component: ViewInvoice,
meta: { requiresAuth: true }
},
]
})
router.beforeEach((to, _, next) => {
if (to.meta.requiresAuth) {
if (!localStorage.getItem('authToken')) {
next(`/login?redirect=${to.fullPath}&reason=not_logged_in`)
} else {
// refresh the token on every route change
// this makes sure token isn't expired
axios.post(
'/auth/refresh',
{ RefreshToken: localStorage.getItem('refToken') }
).then(res => {
localStorage.setItem('authToken', res.data.auth_token)
next()
}).catch(_ => {
// if error is 401 then axios interceptor will automatically handle it
next(`/login?redirect=${to.fullPath}&reason=err`)
})
}
} else {
next()
}
})
export default router
|