我正在使用 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
.
如何以仅从用户的角度工作的方式保护路线?