2016-12-05 15 views
0

私はpolymer starter kitアプリをいくつかのサブルートと、それらのルートに関連付けられたさまざまなタイプのレコードで取得しています。 URLの例は//myapp/records/{recordId}/subRouteです。私はリロード時にアプリケーションの状態を維持したいと思います。私はそうのように試してみた:アドレスバーからポリマーファイアを使用してユーザールートを読み込む

<app-route 
    route="{{route}}" 
    pattern="/records/:recordId" 
    data="{{routeData}}" 
    tail="{{subroute}}" 
></app-route> 
<app-route 
    route="{{subroute}}" 
    pattern="/:page" 
    data="{{subRouteData}}" 
></app-route> 

<firebase-document 
    id="recordsDocument" 
    path="/records/[[routeData.recordId]]" 
    data="{{record}}" 
></firebase-document> 

... 

<script> 
    routePageChanged(page) { // takes subRouteData.page 
    if (!user) { 
     set('page', 'login'), 
    } else if (!routeData.recordId) { 
     set('page', 'start') 
    } else { 
     set('page', page) 
    } 
    } 
</script> 

しかし、これらの条件下では、ブラウザは常にfirebaseは、ユーザーに応答する前routePageChangedが呼び出されているため、ログインページになってしまいます。 ファイアベースが応答するまで、そのオブジェクトが存在しないときに、認証されたファイアベースuserの存在に依存するアドレスバーのルートからアプリケーションを正しくロードするにはどうすればよいですか?

答えて

0

あなたはいくつかのことができます。ユーザーを待っているので、ユーザーオブジェクトを初期化する必要があります。 firebase-AUTHで

、ユーザーオブジェクトがあります:

user: { 
    type: Object, 
    readOnly: true, 
    value: null, 
    notify: true 
}, 

あなたはそのオブジェクトの変更のために聞くことができました。

別の方法は、このようにそれを処理することです:上記のコードの成功に

this.$.auth.signInWithPopup() 
.then(function(response) {// successful authentication response here}) 
.catch(function(error) {// unsuccessful authentication response here}); 

は、ユーザーオブジェクトを設定する必要があり、あなたはそれであなたの最初のルーティングをチェックすることができます。

頭の上に他のオプションはありません。

私は勿論、ドキュメントをお勧めしなければならない、ということ[その他:P

https://github.com/firebase/polymerfire/blob/master/firebase-auth.html

+0

私はあなたの提案を理解していれば、あなたは私は多分それは、「firebaseUserLoaded」と呼ばれるキーとテストを設定することを推奨しています私のルートのいずれかで '_routePageChanged'で何かを実行する前に。ネットワークの問題がある場合は、一見エラーのケースを設定する必要がありますか? –

+0

ええ、あなたのルーティング関数では、boolean firebaseUserLoadedがtrueであるかどうかを調べるif文を持つことができます。 firebase-authコールバックでこのオブジェクトを設定します。ネットワークエラーが発生した場合は、上に示したjavascriptのエラーフローに入ります。その場合は、変数をtrueまたはfalseに設定します –

関連する問題