23 lines
676 B
TypeScript
23 lines
676 B
TypeScript
import { NavigationGuard } from "vue-router";
|
|
import { UserRouteName } from "@/router/user";
|
|
import { AUTH_ACCESS_TOKEN } from "@/constants";
|
|
import { LoginErrorCode } from "@/types/enums";
|
|
|
|
export const authGuardIfNeeded: NavigationGuard = async (to, from, next) => {
|
|
if (to.meta.requiredAuth !== true) return next();
|
|
|
|
// We can't use "currentUser" from apollo here
|
|
// because we may not have loaded the user from the local storage yet
|
|
if (!localStorage.getItem(AUTH_ACCESS_TOKEN)) {
|
|
return next({
|
|
name: UserRouteName.LOGIN,
|
|
query: {
|
|
code: LoginErrorCode.NEED_TO_LOGIN,
|
|
redirect: to.fullPath,
|
|
},
|
|
});
|
|
}
|
|
|
|
return next();
|
|
};
|