2016-06-01 10 views
0

Ich schreibe eine Polymer-Web-Anwendung. Ich verwende Firebase zusammen mit Firebase-Auth für meine Datenbank und Authentifizierung.Polymer und firebase-auth

Ich habe ein Haupt app.html Element auf meiner Index-Seite mit einem benutzerdefinierten my-login Elemente, das erscheint, wenn Sie einen Login-Button klicken, der mein firebase-auth Element und Login-Logik enthält. Bisher konnte ich mich erfolgreich mit dem firebase-auth Element einloggen. Nach dem Anmelden mit dem Element my-login konnte ich jedoch nicht herausfinden, wie ich auf die Anmeldeinformationen auf meiner Seite index.html und auf allen anderen Seiten meiner App zugreifen kann.

Irgendeine Idee, wie man das macht? Ich kann online keine Beispiele für die Verwendung von Login-Informationen zu anderen Elementen als dem finden, das die firebase-auth enthält.

Hier ist meine app.html:

<dom-module id="my-app"> 
    <link rel="import" type="css" href="../styles/app-theme.css"> 
    <template> 
     <app-router style="display:none;"> 
      <app-route path="/" import="/elements/blog.html"></app-route> 
      <app-route path="/artist" import="/elements/artist.html"></app-route> 
      <app-route path="/teacher" import="/elements/teacher.html"></app-route> 
      <app-route path="/research" import="/elements/research.html"></app-route> 
      <app-route path="/contact" import="/elements/contact.html"></app-route> 
      <app-route path="*" import="/elements/blog.html"></app-route> 
     </app-router> 

     <!-- Main Area --> 
     <paper-scroll-header-panel main fixed> 
      <!-- Main Toolbar --> 
      <paper-toolbar class="medium-tall"> 

       <div class=""> 
        <div class="app-name">Joyce K. Lee</div> 
        <span class="spacer"></span> 
        <paper-icon-button icon="account-circle" onclick="login.open()" hidden?="{{!statusKnown || user}}"></paper-icon-button> 
        <paper-icon-button icon="account-square" onclick="{{logout}}" hidden?="{{!statusKnown || !user}}"></paper-icon-button> 
        <template if="{{user}}"> 
         {{user.password.username}} 
        </template> 
       </div> 

       <div class="bottom center fit"> 
        <paper-tabs id="nav" selected="{{selected}}"> 
         <paper-tab><a href="#/"><iron-icon icon="home"></iron-icon></a></paper-tab> 
         <paper-tab><a href="#/artist"><iron-icon icon="custom-icons:brush"></iron-icon></a></paper-tab> 
         <paper-tab><a href="#/teacher"><iron-icon icon="custom-icons:apple"></iron-icon></a></paper-tab> 
         <paper-tab><a href="#/research"><iron-icon icon="custom-icons:book"></iron-icon></a></paper-tab> 
         <paper-tab><a href="#/contact"><iron-icon icon="mail"></iron-icon></a></paper-tab> 
        </paper-tabs> 
       </div> 
      </paper-toolbar> 

      <!-- Main Content --> 
      <div class="content"> 
       <neon-animated-pages style="height:100%" id="pages" class="flex" selected="{{selected}}" entry-animation="slide-from-right-animation" exit-animation="slide-left-animation"> 
        <neon-animatable><my-blog></my-blog></neon-animatable> 
        <neon-animatable><my-artist></my-artist></neon-animatable> 
        <neon-animatable><my-teacher></my-teacher></neon-animatable> 
        <neon-animatable><my-research></my-research></neon-animatable> 
        <neon-animatable><my-contact></my-contact></neon-animatable> 
       </neon-animated-pages> 
      </div> 

      <simple-overlay id="login" with-backdrop> 
       <my-login></my-login> 
      </simple-overlay> 
     </paper-scroll-header-panel> 
    </template> 

    <script> 
     (function() { 
      Polymer({ 
       is: 'my-app' 
      }); 
     })(); 
    </script> 
</dom-module> 

Hier ist meine Arbeits my-login Element:

<dom-module id="my-login"> 
    <template> 
     <firebase-auth id="firebaseLogin" user="{{user}}" status-known="{{statusKnown}}" location="https://brilliant-inferno-6056.firebaseio.com" provider="password" on-error="errorHandler" on-user-created="userSuccessHandler" on-password-changed="userSuccessHandler" on-password-reset="userSuccessHandler" on-user-removed="userSuccessHandler"></firebase-auth> 

     <h4>Login</h4> 
     <paper-input label="Email" value="{{email::input}}"></paper-input> 
     <paper-input label="Password" type="password" value="{{password::input}}"></paper-input> 
     <paper-button on-tap="login" raised>Login</paper-button> 
     <br> 
     <div id="message">[[message]]</div> 
     <h3>Login status:</h3> 
     <p>{{computeLoginStatus(statusKnown, user)}}</p> 
    </template> 

    <script> 
     (function() { 
      'use strict'; 

      Polymer({ 
       is: 'my-login', 

       properties: { 
        message: { 
         type: String, 
         value: '' 
        }, 
        email: { 
         type: String, 
         value: '' 
        }, 
        password: { 
         type: String, 
         value: '' 
        }, 
        user: { 
         type: Object, 
         value: null, 
         notify: true 
        }, 
        statusKnown: { 
         type: Boolean, 
         notify: true 
        } 
       }, 
       login: function() { 
        var params = {}; 
        params.email = this.email; 
        params.password = this.password; 
        this.$.firebaseLogin.login(params); 
       }, 
       logout: function() { 
        this.$.firebaseLogin.logout(); 
       }, 
       errorHandler: function (e) { 
        this.message = 'Error: ' + e.detail.message; 
       }, 
       userSuccessHandler: function (e) { 
        this.message = e.type + ' success!'; 
       }, 
       createUserHandler: function (e) { 
        this.$.firebaseLogin.createUser(this.email, this.password); 
       }, 
       changePasswordHandler: function (e) { 
        this.$.firebaseLogin.changePassword(this.email, this.password, this.newPassword); 
       }, 
       resetPasswordHandler: function (e) { 
        this.$.firebaseLogin.sendPasswordResetEmail(this.email); 
       }, 
       removeUserHandler: function (e) { 
        this.$.firebaseLogin.removeUser(this.email, this.password); 
       }, 
       computeCreateUserDisabled: function (email, password) { 
        return !email || !password; 
       }, 
       computeChangePasswordDisabled: function (email, password, newPassword) { 
        return !email || !password || !newPassword; 
       }, 
       computeResetPasswordDisabled: function (email, password) { 
        return !email || !password; 
       }, 
       computeRemoveUserDisabled: function (email, password) { 
        return !email || !password; 
       }, 
       computeLoginHidden: function (statusKnown, user) { 
        return !statusKnown || !!user; 
       }, 
       computeLogoutHidden: function (statusKnown, user) { 
        return !statusKnown || !user; 
       }, 
       computeLoginStatus: function (statusKnown, user) { 
        if (statusKnown && user) { 
         return 'Logged in'; 
        } 
        if (statusKnown) { 
         return 'Logged out'; 
        } 
        return 'Unknown (checking status...)'; 
       } 
      }); 
     })(); 
    </script> 
</dom-module> 

Antwort

0

Bind das Benutzerobjekt in my-login auf eine Eigenschaft my-App. Das Benutzerobjekt Geist hält Sie wahrscheinlich nicht alles, was Sie wollen, so dass Sie wahrscheinlich ein Firebase-Dokument hinzufügen müssen, das die zusätzlichen Informationen holt, die Sie benötigen. Gleiches gilt, binden Sie das Ergebnis dieses Objekts genau wie der Benutzer in my-app.

<dom-module id="my-app"> 
<link rel="import" type="css" href="../styles/app-theme.css"> 
<template> 
    <app-router style="display:none;"> 
     <app-route path="/" import="/elements/blog.html"></app-route> 
     <app-route path="/artist" import="/elements/artist.html"></app-route> 
     <app-route path="/teacher" import="/elements/teacher.html"></app-route> 
     <app-route path="/research" import="/elements/research.html"></app-route> 
     <app-route path="/contact" import="/elements/contact.html"></app-route> 
     <app-route path="*" import="/elements/blog.html"></app-route> 
    </app-router> 

    <!-- Main Area --> 
    <paper-scroll-header-panel main fixed> 
     <!-- Main Toolbar --> 
     <paper-toolbar class="medium-tall"> 

      <div class=""> 
       <div class="app-name">Joyce K. Lee</div> 
       <span class="spacer"></span> 
       <paper-icon-button icon="account-circle" onclick="login.open()" hidden?="{{!statusKnown || user}}"></paper-icon-button> 
       <paper-icon-button icon="account-square" onclick="{{logout}}" hidden?="{{!statusKnown || !user}}"></paper-icon-button> 
       <template if="{{user}}"> 
        {{user.password.username}} 
       </template> 
      </div> 

      <div class="bottom center fit"> 
       <paper-tabs id="nav" selected="{{selected}}"> 
        <paper-tab><a href="#/"><iron-icon icon="home"></iron-icon></a></paper-tab> 
        <paper-tab><a href="#/artist"><iron-icon icon="custom-icons:brush"></iron-icon></a></paper-tab> 
        <paper-tab><a href="#/teacher"><iron-icon icon="custom-icons:apple"></iron-icon></a></paper-tab> 
        <paper-tab><a href="#/research"><iron-icon icon="custom-icons:book"></iron-icon></a></paper-tab> 
        <paper-tab><a href="#/contact"><iron-icon icon="mail"></iron-icon></a></paper-tab> 
       </paper-tabs> 
      </div> 
     </paper-toolbar> 

     <!-- Main Content --> 
     <div class="content"> 
      <neon-animated-pages style="height:100%" id="pages" class="flex" selected="{{selected}}" entry-animation="slide-from-right-animation" exit-animation="slide-left-animation"> 
       <neon-animatable><my-blog user="{{user}}"></my-blog></neon-animatable> 
       <neon-animatable><my-artist user="{{user}}"></my-artist></neon-animatable> 
       <neon-animatable><my-teacher user="{{user}}"></my-teacher></neon-animatable> 
       <neon-animatable><my-research user="{{user}}"></my-research></neon-animatable> 
       <neon-animatable><my-contact user="{{user}}"></my-contact></neon-animatable> 
      </neon-animated-pages> 
     </div> 

     <simple-overlay id="login" with-backdrop> 
      <my-login user="{{user}}"></my-login> 
     </simple-overlay> 
    </paper-scroll-header-panel> 
</template> 

<script> 
    (function() { 
     Polymer({ 
      is: 'my-app' 
     }); 
    })(); 
</script> 

0

Für jeden, der diese benötigt, geht das Benutzerobjekt wird in der App geteilt werden, wenn Sie einen Augenblick nutzen und Sie sollten es zugreifen, indem beispielsweise Benutzer in Ihren Elementen können. um die ID des Benutzers zu erhalten. Fügen Sie einfach a in Ihre Elemente ein.

diese in deine index.html

<firebase-app 
    id="firApp" 
    name="AnyName" 
    api-key = "******************" 
    auth-domain = "**************" 
    database-url = "***************" 
    storage-bucket = "*****************" 
    messaging-sender-id = "************"> 
</firebase-app> 

So wird Ihr Element sein, so etwas wie:

<dom-module id="my-view"> 
    <template> 
    <style> 
..... 
</style> 


<!-- user is null if no user --> 
    <firebase-auth 
     id="auth" 
     app-name="AnyName" 
     provider="facebook" ***for example 
     signed-in="{{signedIn}}"  
     user="{{user}}"> 
    </firebase-auth> 

<script> 
    Polymer({ 
     is: 'my-view', 

     properties: { 
     signedIn: { 
      type: Boolean, 
      notify: true, 
      value: false 
     } 
     }, 
    }); 

    </script> 
</dom-module> 

Sie können auch eine String-Eigenschaft für Benutzer hinzufügen, und binden Sie es an die firebase- auth Benutzer, etc. Denken Sie daran, polyfire.html zu importieren und installieren Sie es, wenn Sie nicht haben. Prost