【问题标题】:meteor flow-router placement/security流星流路由器放置/安全
【发布时间】:2016-07-16 10:09:02
【问题描述】:

我对流星上的流路由器有疑问。 在流星的新项目结构中,建议将所有文件保存在“导入文件夹”中,并导入服务器文件夹或客户端文件夹。在我看到的使用流路由器的教程中,没有导入文件夹,并且其中包含 js 文件的路由文件夹保留在项目文件夹下。这对我提出了几个问题。

  1. 流路由器代码在哪里运行?在客户端?在服务器上?两者都有?
  2. 如果它在两者上运行,我应该把它放在导入文件夹之外吗?
  3. 如果它同时/仅在客户端上运行,这意味着什么安全方面?说我不希望某个用户能够访问某个页面,所以在 flow-router action() 中我编写了一个代码来阻止人们到达我不想要他们的地方,他们不能改变吗这段代码在客户端并绕过墙?
  4. 在 flow-router js 文件中引用用户时,我使用 Meteor.userId() 还是 this.userId?。
  5. 我在 if(Meteor.isClient) 中编写了三个函数,我从教程中复制了这些函数。这些函数是 Accounts.onLogin、Accounts.onLogout、FlowRouter.tringgers.enter。 因为他们在客户端上,所以用户可以破解它们吗?

提前致谢!

【问题讨论】:

    标签: meteor flow-router


    【解决方案1】:
    1. 来自documentation

    流路由器是客户端路由器,它没有服务器端路由功能。它也没有计划实现这些功能。

    所以 Flow Router 只在客户端运行,你应该把相关代码放在 /imports/startup/client 中

    1. 参见 (1)。通常,您的所有代码都应放在导入目录中。

      Meteor 确保任何名为 server/ 的目录中的任何文件都只能在服务器上使用,同样适用于任何名为 client/ 的目录中的文件

    因此,如果您希望客户端和服务器都可以访问某些代码,请不要将其放在任何名为 /client 或 /server 的子目录中。

    1. 虽然以前使用 Iron Router,身份验证是在路由器层完成的,但使用 Flow Router,您应该在模板/组件层中编写身份验证逻辑。根据 Flow Router 的创建者的说法,在流路由器 action() 中编写阻止用户访问页面的代码并不是一个好的模式。阅读here 了解示例和更多详细信息。

    在服务器渲染的应用程序中(在 PHP 时代),如果有未经授权的访问,我们可以将用户重定向到登录页面或其他页面。在 Meteor 或任何单页应用程序中,我们可以简单地向用户显示登录屏幕,而不是将他们重定向到另一个页面。否则,我们可以简单地说:“您无权查看此页面。”

    1. 同 (3)。您不应该在路由器层引用用户。

    2. 在客户端上运行的任何代码都不会受到恶意用户的攻击。

    您可能会发现以下有用:

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2014-01-13
    相关资源
    最近更新 更多