我剛剛從單一應用程序Polymer Web應用程序的json數據存儲更改爲了聚合力。我的網絡應用程序中的所有數據都是公開的,只有一個管理員應該更改數據,所以我只有一個頂級節點用於所有頁面數據。如何查看聚合火力中登錄的管理員?
對於登錄,我將firebase-auth元素與公共提供者一起使用,並設置了規則以賦予我的管理員寫入權限。
但現在我正在努力解決如何給登錄的管理員反饋以顯示他已登錄。爲此,我在我的數據庫中添加了第二個頂級節點('isAdmin'),它僅適用於一個登錄管理員,一個'Admin'鍵和一個布爾值'true'。我試圖綁定到與火力文檔,並在使用DOM,如果模板像這樣:
<firebase-auth
id="auth"
user="{{user}}"
provider="google"
app-name="myApp"
signed-in="{{signedIn}}">
</firebase-auth>
<firebase-document
log
id="adminCheck"
app-name="myApp"
path="/isAdmin"
data="{{firebaseAdmin}}">
</firebase-document>
<paper-button raised on-tap="login" hidden="[[user]]">Log in</paper-button>
<paper-button raised on-tap="logout" hidden="[[!user]]">Log out</paper-button>
<template is="dom-if" if="[[firebaseAdmin.Admin]]" restamp>
<span>Hello [[user.displayName]]!</span>
</template>
然而,由於只有一個登錄的管理員可以讀取節點,管理員值實際上從未改變我的JavaScript,只有當我登錄後刷新瀏覽器。所以,如果我嘗試登錄,像這樣的狀態:
<script>
Polymer({
is: 'my-login',
properties: {
user: {
type: Object
},
firebaseAdmin: {
type: Object
},
},
_checkAdmin: function() {
var myVal = this.$.adminCheck.getStoredValue('/isAdmin');
console.log('Value for admin stored in firebase-document element: ' + myVal.Admin);
console.log('Polymer property for admin: ' + this.firebaseAdmin.Admin);
},
login: function() {
this.$.auth.signInWithPopup();
this._checkAdmin();
},
logout: function() {
this.$.auth.signOut();
this._checkAdmin();
}
});
</script>
我總是得到:即使登錄
Value for admin stored in firebase-document element: undefined Polymer property for admin: undefined
從我_checkAdmin機能恢復,只有當我刷新頁面。管理員登錄後,我會得到火力文檔日誌與在isAdmin節點存儲的對象:
Got stored value! Object {Admin: true}
,現在我想用這個值被卡住,即使註銷。然後我_checkAdmin功能會隨時登錄這個:
Value for admin stored in firebase-document element: undefined
Polymer property for admin: true
然後我試圖各種事情沒有成功,但現在我想這是不檢查一個登錄管理的適當方法?我只是不認爲我應該直接在javascript中檢查uid。
高興,如果任何親會四周,想幫助我,亞歷克斯
感謝Michael Bleigh的幫助下,我終於得到了它的工作,像這樣:
<dom-module id="my-login">
<template>
<style>
span {
margin-left: 1rem;
}
paper-button {
background: -webkit-linear-gradient(#fff, #333 66%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>
<firebase-auth
id="auth"
user="{{user}}"
provider="google"
app-name="myApp"
signed-in="{{signedIn}}">
</firebase-auth>
<firebase-document
app-name="myApp"
path="/admins/[[user.uid]]"
data="{{isAdmin}}">
</firebase-document>
<paper-button raised on-tap="login" hidden="[[user]]">Log in</paper-button>
<paper-button raised on-tap="logout" hidden="[[!user]]">Log out</paper-button>
<template is="dom-if" if="[[admin]]" restamp>
<span hidden="[[!user]]">Hello [[user.displayName]]!</span>
</template>
</template>
<script>
Polymer({
is: 'my-login',
properties: {
user: {
type: Object
},
isAdmin: {
type: Object
},
admin: {
type: Boolean,
computed: '_checkAdmin(isAdmin)'
}
},
_checkAdmin: function(isAdmin) {
if (typeof isAdmin === 'boolean') {
console.log('Polymer property for admin is defined');
return true;
}
},
login: function() {
this.$.auth.signInWithPopup();
},
logout: function() {
this.$.auth.signOut();
}
});
</script>
這個作品非常完美,非常感謝!我想我錯了,因爲我認爲我不需要動態的uid路徑,因爲我只有一個管理員。 – atomikolex