用JavaScript(Netlify身份)控制内容:内容在慢速连接中闪烁,如何仅在登录检查后加载内容?

时间:2018-09-15 14:18:03

标签: javascript netlify mkdocs

我并不是真正的Web应用程序开发人员,我想询问门控网站内容的最佳做法。

我正在准备部署使用mkdocs创建的文档。它使用Netlify Identity,因为有了Github auth即可使用,无需任何编码。

我当前的解决方案:我已经通过mkdocs中的模板插件在头中添加了Netlify Identity脚本和“登录/注销”按钮,然后创建了一个静态文档/ login /(该文件会自动被提取在mkdocs中,但不会通过模板生成)。

在标准模板中,除非用户已登录,否则JS重定向到/ login /:

if (window.netlifyIdentity) {
 window.netlifyIdentity.on("init", user => {
  if (!user) {
    document.location.href = "/login/";
  }
});
}

在静态页面上,仅在用户登录后才重定向到/。

  if (window.netlifyIdentity) {
    window.netlifyIdentity.on("init", user => {
      if (!user) {
        window.netlifyIdentity.on("login", () => {
          document.location.href = "/";
        });
      }
    });
  }

我希望这是解决问题的合理方法。该文档没有存储任何重要内容,但我仍然不希望该内容公开。

但是我注意到在连接速度慢的情况下,重定向需要一两秒钟,因此当访问深层URL时,登录前屏幕上的内容会闪烁。

只有在执行登录检查后,才能停止并加载内容吗?

1 个答案:

答案 0 :(得分:0)

这将无法按您期望的方式工作并且不安全。

如果我想在没有帐户的情况下阅读您的内容,只需在浏览器中disable JavaScript(单击几下鼠标)就可以加载您的网站,但重定向将永远不会运行。

无论如何,启用JavaScript的方式都是浏览器下载页面,然后下载所有资源(包括脚本),然后最终运行任何脚本。没有办法改变它。当然,在快速的系统上,用户可能不会感觉到延迟,因为延迟非常短,但是总会有延迟。这就是浏览器的工作方式。

如果您不希望用户在登录后才可以访问信息,那么您必须等到用户登录后才能发送信息。换句话说,您需要将服务器配置为不完全发送该页面,直到它收到用户有权接收该信息的验证。具体操作方式取决于您使用的是哪台服务器,这将是一个单独的问题。