我从Polymer和Firebase开始,并实施了Google OAuth身份验证。
我注意到在验证之前页面已加载,如果您单击后退,则可以在未经授权的情况下访问该页面,尽管您无法使用firebase api,因此该页面无法使用。
我的问题是我不想在验证之前加载我的javascript。
怎么可能这样做。
非常感谢
答案 0 :(得分:2)
这取决于你是否使用firebase或聚合物包装,聚合物火焰。
为要有条件加载的所有导入创建文档
// user-scripts-lazy.html
<link rel="import" href="user-script-one.html">
<script src="script.js"></script>
// etc
使用Polymerfire
在托管<firebase-auth>
的元素中创建一个观察者,您将从firebase-auth中公开一些变量。
<firebase-auth
user="{{user}}"
status-known="{{statusKnown}}"></firebase-auth>
在观察者中,观察用户元素和已知状态
statusKnown:如果为true,则可以通过检查用户属性
来确定登录状态user:具有用户相关元数据的当前经过身份验证的用户。请参阅规范的firebase.User文档。
observers:[
'_userStateKnown(user, statusKnown)'
]
_userStateKnown: function(user, status) {
if(status && user) {
// The status is known and the user has logged in
// so load the files here - using the lazy load method
var resolvedPageUrl = this.resolveUrl('user-scripts-lazy.html.html');
this.importHref(resolvedPageUrl, null, this.onError, true);
}
}
要在不使用Polymerfire的情况下获取状态,可以使用onAuthStateChange
properties: {
user: {
type: Object,
value: null // important to initialise to null
}
}
..
ready: function() {
firebase.auth().onAuthStateChagned(function(user) {
if(user)
this.set('user', user); // when a user is logged in set their firebase user variable to ser
else
this.set('user', false); // when no user is logged in set user to false
}.bind(this)); // bind the Polymer scope to the onAuthStateChanged function
}
// set an observer in the element
observers: [
'_userChanged(user)'
],
_userChanged: function(user) {
if(user === null) {
// authStatus is false, the authStateChagned function hasn't returned yet. Do nothing
return;
}
if(user) {
// user has been signed in
// lazy load the same as before
} else {
// no user is signed in
}
}
我在这里编写代码时没有对代码进行测试,但我已经多次实现了相同的功能。
答案 1 :(得分:1)
有几种选择。
答案 2 :(得分:0)
如果仅仅是从视图中删除未登录页面的美学问题,您是否可以在用户未经过身份验证时隐藏页面(或显示某种叠加层)?
我目前在一个元素的当前项目中有这个:hidden$="{{!user}}"
答案 3 :(得分:0)
我已经为我的目的确定了解决方案......