2016-04-07 6 views
0

Hallo Ich mache eine App mit Ember und Firebase, in dem Benutzer ein neues Konto erstellen können, sich einloggen und Informationen über sein Konto und einige geschützte Routen nur sehen dürfen, wenn er autorisiert ist. Damit nicht autorisierte Benutzer nur zwei Routen sehen können: Index ('/'), der das Anmeldeformular anzeigt, und einen Link zur Anmelde-Route ('/ Anmeldung'), der anzeigt und es ihnen ermöglicht, ein neues Konto zu erstellen. Meine app/router.js Router sieht wie folgt aus:Wie kann man den Modell-Hook des Index/Index-Routes nach der Benutzerautorisierung aufrufen?

Router.map(function() { 
    this.route('signup'); 
    this.route('index', {path: '/'}, function() { 
    this.authenticatedRoute('index', {path: '/'}); 
    this.authenticatedRoute('events'); 
    this.authenticatedRoute('about'); 
    }); 
}); 

app/templates/index.hbs enthält Login-Formular und wenn sich der Benutzer in der verschachtelten Index Route gemacht wird, aber es ist Modell Haken, bis er nicht aufgerufen ist aufgefrischt. Wie funktioniert es?

app/templates/index.hbs

{{#unless session.isAuthenticated}} 

    {{signin-form store=store session=session authorized="authorized"}} 

{{else}} 

    {{#link-to 'index.index' class="item"}}Home{{/link-to}} 
    {{#link-to 'index.events' class="item"}}Events{{/link-to}} 
    {{#link-to 'index.about' class="item"}}About{{/link-to}} 


    {{outlet}} 

{{/unless}} 

app/Routen/application.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    beforeModel() { 
    return this.get("session").fetch().catch(function() {}); 
    }, 
    actions: { 
    signOut() { 
     this.get('session').close(); 
     this.transitionTo('index'); 
    }, 
    accessDenied() { 
     this.transitionTo('index'); 
    }, 
    authorized() { 
     console.log('authorized'); 
     this.transitionTo('index'); 
    } 
    } 
}); 

app/components/signin-form.js

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    didRender() { 
    this._super(...arguments); 
    this.$('form.ui.form').form(); 
    }, 

    signIn() { 
    let { userPassword, userEmail } 
     = this.getProperties('userPassword', 'userEmail'); 
    console.log('Logging with', userPassword, userEmail); 
    this.get("session").open("firebase", { 
     provider: 'password', 
     email: userEmail, 
     password: userPassword 
    }).then((data) => { 
     console.log(data); 
     this.sendAction('authorized'); 
    }); 
    }, 

    actions: { 
    submit() { 
     this.signIn(); 
    } 
    } 

}); 

Antwort

0

In der app/routes/application.js Ich habe

geändert

in

authorized() { 
    this.refresh(); 
} 

und jetzt funktioniert es. Aber im Allgemeinen habe ich immer noch Zweifel an dieser Lösung. Wenn Sie also eine bessere Vorgehensweise sehen, würde ich mich freuen, davon zu hören.

+0

Ich würde empfehlen, eine separate Route für die Anmeldung zu verwenden und dann einen beforeModel-Hook zu verwenden, um den Benutzer auf diese Route umzuleiten. Schau, wie 'ember-simple-auth' funktioniert. – Lux

Verwandte Themen