【问题标题】:VueRouter, VueJS, and Laravel route guardVueRouter、VueJS 和 Laravel 路由守卫
【发布时间】:2017-06-24 01:44:11
【问题描述】:

我想将我的应用程序的特定页面隐藏在安全层后面(一个简单的密码表单,它将向服务器发送请求以进行验证)。

根据 VueRouter 的文档,我认为beforeEnter 是合适的。但是,我不完全确定如何要求用户访问特定组件,然后成功输入密码,然后才能继续当前路线。

有人有这方面的例子吗?我找不到类似的东西。

import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter);

const routes = [
  { path: '/test/:testURL', component: require('./components/test.vue'), 
    beforeEnter: (to, from, next) => {
           // somehow load another component that has a form
           // the form will send a request to Laravel which will apply some middleware
           // if the middleware successfully resolves, this current route should go forward. 
    }
  },
];

const router = new VueRouter({
  routes,
  mode: 'history',
});

const app = new Vue({
  router
}).$mount('#app');

【问题讨论】:

    标签: vuejs2 vue-router


    【解决方案1】:

    假设您只想对选定的组件执行身份验证,您可以使用 beforeEnter 路由保护。使用以下代码。

    const routes = [
      { path: '/test/:testURL', component: require('./components/test.vue'), 
        beforeEnter:requireLogin
      },
    ];
    
    function requireLogin(to, from, next) {
        if (authenticated) {
            next(true);
        } else {
            next({
                path: '/login',
                query: {
                    redirect: to.fullPath
                }
            })
        }
    }
    

    此外,您可以在将 authenticated 变量设置为 true 后,在 login 组件中创建登录屏幕和操作以重定向到给定的重定向参数。我建议您在 veux 存储中维护 authenticated 变量

    【讨论】:

    • 这太棒了——非常感谢!我不确定我在项目本身中是否需要 VueX(我目前通常没有任何共享数据)。否则,您将如何维护此经过身份验证的变量?我在想一些类似于 cookie 而不是变量的东西,所以我很好奇这种方法会是什么样子
    • 不错。下一个最佳方法是在浏览器本地存储中捕获此值。它实际上有好处。
    • 我将查看本地存储位!所以我才意识到这一点——我对身份验证以及它如何与前端交互(之前主要使用刀片等)是新手。基于authenticated 的值来确定身份验证流程是否明智?这不就是一个存储在前端的变量,任何人都可以修改吗?
    • 如果你只做前端验证,是的,你是对的,即使保存在 javascript 本身也不够安全。
    猜你喜欢
    • 2019-02-04
    • 2018-12-04
    • 2017-11-07
    • 2018-11-14
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多