I need to redirect users to login page if they are not authenticated. I need something like route.beforeEach
in Vue.js, ideally:
sapper.beforeRouteChange((to, from, next) => {
const isAuth = "[some session or token check]";
if (!isAuth) {
next('/login')
}
next()
})
I found Sapper - protected routes (route guard) this question but I think it's not enough for my needs. What if token or auth changes in runtime? OR is it covered by reactivity?
Edit 1: I think that this issue on Sapper GitHub solves my problem.
So I placed this code to /src/routes/_layout.svelte
:
import AuthMiddleware from "../methods/authMiddleware.js";
import { goto, stores } from '@sapper/app';
const { page } = stores();
if (typeof window !== "undefined" && typeof document !== "undefined") {
page.subscribe(({ path, params, query }) => {
const from = window.location.pathname;
const redirect = (href) => { goto(href); }
AuthMiddleware.beforeChange(from, path, redirect, params, query);
})
}
And this is authMiddleware.js
file:
export default class AuthMiddleware {
static beforeChange(from, to, redirect, params, query) {
if (!AuthMiddleware._isUserAuthenticated()) {
redirect("/login");
}
}
// ~
static _isUserAuthenticated() {
return true; // TODO: Implement
}
}
more information on route hooks can be found here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With