From 5e2c39574842081a8c21977a5a3be5145477d5ea Mon Sep 17 00:00:00 2001 From: YuukanOO Date: Fri, 22 Jan 2021 10:34:01 +0100 Subject: [PATCH] add requireAuthentication Navigation guards --- hn-vue/src/main.js | 2 +- hn-vue/src/pages/Login.vue | 9 ++++++++- hn-vue/src/pages/Publish.vue | 3 +++ hn-vue/src/router.js | 19 ++++++++++++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 hn-vue/src/pages/Publish.vue diff --git a/hn-vue/src/main.js b/hn-vue/src/main.js index 078bec5..1f7b522 100644 --- a/hn-vue/src/main.js +++ b/hn-vue/src/main.js @@ -10,8 +10,8 @@ Vue.config.productionTip = false; Vue.use(Vuelidate); Vue.use(Notifications); -const router = createRouter(); const store = createStore(); +const router = createRouter(() => store.state.auth.token); api.useToken(() => store.state.auth.token); diff --git a/hn-vue/src/pages/Login.vue b/hn-vue/src/pages/Login.vue index 431221a..1ed2fcb 100644 --- a/hn-vue/src/pages/Login.vue +++ b/hn-vue/src/pages/Login.vue @@ -34,7 +34,14 @@ export default { username: this.username, password: this.password, }); - this.$redirectWithMessage({ name: "links" }, "Vous êtes authentifié !"); + + let redirectTo = { name: "links" }; + + if (this.$route.query.returnUrl) { + redirectTo = this.$route.query.returnUrl; + } + + this.$redirectWithMessage(redirectTo, "Vous êtes authentifié !"); } catch (e) { this.err = e; } diff --git a/hn-vue/src/pages/Publish.vue b/hn-vue/src/pages/Publish.vue new file mode 100644 index 0000000..df258bf --- /dev/null +++ b/hn-vue/src/pages/Publish.vue @@ -0,0 +1,3 @@ + diff --git a/hn-vue/src/router.js b/hn-vue/src/router.js index f3095ef..6c178fa 100644 --- a/hn-vue/src/router.js +++ b/hn-vue/src/router.js @@ -3,11 +3,22 @@ import VueRouter from "vue-router"; import Links from "./pages/Links.vue"; import Register from "./pages/Register.vue"; import Login from "./pages/Login.vue"; +import Publish from "./pages/Publish.vue"; import LinkDetail from "./pages/LinkDetail.vue"; Vue.use(VueRouter); -export default function createRouter() { +export default function createRouter(isAuthenticated) { + const requireAuthentication = (to, from, next) => { + const connected = isAuthenticated(); + + if (connected) { + next(); + } else { + next({ name: "login", query: { returnUrl: to.fullPath } }); + } + }; + const router = new VueRouter({ routes: [ { path: "/", name: "links", component: Links }, @@ -19,6 +30,12 @@ export default function createRouter() { }, { path: "/register", name: "register", component: Register }, { path: "/login", name: "login", component: Login }, + { + path: "/publish", + name: "publish", + beforeEnter: requireAuthentication, + component: Publish, + }, { path: "*", redirect: "/" }, ], });