在加载 html 之前运行脚本 vuejs

时间:2021-01-23 09:36:11

标签: javascript vue.js

我想测试用户是否有登录,如果没有他将返回登录页面。 我希望在加载 html(或模板)之前执行检查用户是否登录的脚本。 我试过了

beforeCreate()

和其他东西,但 html 仍然在脚本运行之前加载。 这是我的代码

if(sessionStorage.getItem("email") == undefined) location.href = "/";

编辑 我使用 CLI 制作了这个 vue 项目,所以我没有带有 head 和 body 的普通 index.html,我可以简单地在 vue 之外的任何地方添加脚本。

3 个答案:

答案 0 :(得分:0)

尝试在启动 vue 实例之前检查您的条件是否匹配,并在满足条件后启动它,如下所示:

if(sessionStorage.getItem("email") == undefined) {
   location.href = "/";
} else {
   var app = new Vue({
      el: '#app',
      data: {
         message: 'Hello Vue!'
      }
   })
}

答案 1 :(得分:0)

使用 JavaScript 实现安全代码不被视为“最佳实践”。如果用户在他们的浏览器中关闭 JavaScript,他们就有效地绕过了您的安全。

相反,使用服务器端代码来检测当前用户是否登录,如果没有,则发送 HTML 重定向到登录页面,而不是正常的 HTML 内容。

伪代码(因为您没有指定任何服务器端语言):

if(userLogin <> true)
    Return HtmlRedirect("YourLoginPage")
...
Return CuurrentPage

如果用户无权查看,此方法可防止向用户发送任何 HTML。

答案 2 :(得分:0)

我同意@Dragonlaird 所说的从客户端处理它不是最佳实践。但是,我认为您必须尝试使用​​ beforeMountbeforeUpdate 而不是 beforeCreate,因为您需要在加载 HTML(或模板)之前执行这些操作。根据 Vue.js 文档,

  1. beforeMount: 它在安装开始之前被调用:渲染函数即将被第一次调用。 但是这个钩子(beforeMount) 在服务端渲染期间不会被调用。

  2. beforeUpdate: 在修补 DOM 之前数据发生变化时调用它。这是在更新之前访问现有 DOM 的好地方,例如删除手动添加的事件侦听器。

在服务端渲染时也不会调用这个钩子,因为只有初始渲染是在服务端执行的。

有关更多信息,请参阅 Vue.js 文档。

https://vuejs.org/v2/api/#Options-Lifecycle-Hooks

相关问题