1

我正在使用 Polymer Starter Kit 和 polymerfire 创建具有两条路线的 firebase 应用程序:“staff”和“donate”。捐赠路线是公开的,员工路线是私人的。我想保护员工路线,以便只有以电子邮件结尾的登录用户mycompany.com才能访问它。未经身份验证的用户将被重定向到/donate.

我的第一次尝试是在dom-if模板中包装这些路由的链接和声明。这可以防止用户看到路线,但如果用户登录,他们将无法从地址栏导航到该路线 - 他们必须先点击应用程序中的路线链接。这令人困惑:即使显示了“捐赠”页面,地址栏仍可能显示“员工”。

<iron-selector selected="[[page]]" attr-for-selected="name" class="drawer-list" role="navigation">
  <template is="dom-if" if="[[user]]" restamp="true">
    <a name="staff" href="/staff">Staff</a>
  </template>
  <a name="donate" href="/donate">Donate</a>
</iron-selector>

<iron-pages
    selected="[[page]]"
    attr-for-selected="name"
    fallback-selection="donate"
    role="main">
  <template is="dom-if" if="[[user]]" restamp="true">
    <ksybf-staff name="staff"></ksybf-staff>
  </template>
  <ksybf-donate name="donate" route="[[subroute]]"></ksybf-donate>
</iron-pages>

我还尝试过强制阻止路由加载:

_routePageChanged: function(page) {
  if (this.user) {
    this.page = page || 'donate';
  } else {
    this.page = 'donate';
  }
},

这会产生类似的结果:初始浏览以/staff加载“捐赠”路线,即使地址栏显示//app/staff.

如何以仅从用户的角度工作的方式保护路线?

4

2 回答 2

1
  1. 添加一个id到您的<iron-pages>.
  2. 给它添加一个iron-select监听器。
  3. 在侦听器函数中,添加逻辑以在用户未登录的情况下进行重定向。

它看起来像这样<iron-pages>

<iron-pages
    id="selector"
    selected="[[page]]"
    attr-for-selected="name"
    fallback-selection="donate"
    role="main">
  <ksybf-staff name="staff"></ksybf-staff>
  <ksybf-donate name="donate" route="[[subroute]]"></ksybf-donate>
</iron-pages>

添加监听器:

listeners: {
    'selector.iron-select': 'pageChanged'
}

和功能:

pageChanged: function(e){
    var page = this.$.selector.selected;
    switch (page){
        case 'staff':
            if (userIsNotLoggedIn){
                //Ideally, I would send a toast here saying that the user should be logged in
                window.location.href = '/donate'                
            }
    }
}
于 2017-03-10T06:26:32.530 回答
0

我如何解决这个问题是利用铁页的“选定属性”。

<iron-pages selected-attribute="active">

这将在您的员工和捐赠页面中设置活动属性。在人员组件中的 active 属性上使用观察者,如果 active === true 然后进行检查。如果他们没有经过身份验证/授权,那么只需将他们踢回他们所属的地方。

于 2016-12-21T13:00:20.837 回答