Я создаю приложение, используя vue, которое требует аутентификации. Приложение имеет два родительских маршрута:
const router = new Router({
mode: "history",
routes: [
{
path: "/",
component: Public,
redirect: "login",
children: [
/* ... */
],
},
{
path: "/p",
component: Private,
meta: {
requiresAuth: true,
},
children: [
/* ... */
],
},
{
path: "*",
component: NotFound,
},
],
});
- Если пользователь вошел в систему и пытается получить доступ к маршруту, который не имеет
requiresAuth: true
, он должен быть перенаправлен на /p
маршрут, в противном случае ему должно быть разрешено ввести - Если пользователь вошел в систему и пытается получить доступ к маршруту, который имеет
requiresAuth: true
, ему следует разрешить войти, в противном случае он должен быть перенаправлен на /login
route
Я придумал следующий Vue охранник маршрута:
router.beforeResolve(async (to, _, next) => {
const routeRequiresAuth = to.matched.some(
(record) => record.meta.requiresAuth
);
try {
await Auth.currentAuthenticatedUser();
if (routeRequiresAuth) {
next();
return;
} else {
next("/p");
}
} catch {
if (routeRequiresAuth) {
next("/");
} else {
next();
}
}
});
Судя по тому, что я тестировал, это работает идеально, но я не эксперт в Vue. Я впервые использую его, и мне не совсем удобно отправлять этот код. Я хотел бы, чтобы кто-то с большим опытом сообщил мне, верен ли этот код, и если нет, что я могу сделать для достижения конечной цели.