Ich habe eine Route, die AuthenticatedRouteMixin
oder UnauthenticatedRouteMixin
sein sollte, je nachdem, welche Antwort vom Server kommt. Wie implementiere ich das?Ember simple-auth AuthenticatedRouteMixin oder UnauthenticatedRouteMixin unterwegs je nach Zustand
Derzeit habe ich eine Route mit AuthenticatedRouteMixin
und ich erzwinge die Route authentifiziert und De-authenticated durch überschreiben mein beforeModel und Implementieren der Aktion willTransition wie folgt.
beforeModel() {
this.set('session.isAuthenticated', true);
return this._super(...arguments);
}
Und
actions: {
willTransition: function(){
if (Ember.isEmpty(_this.get('session.data.authenticated.token')))
{
this.set('session.isAuthenticated', false);
}
}
}
Allerdings gibt es zwei Probleme mit diesem.
- Es sieht aus und fühlt sich falsch an. Es gibt wahrscheinlich einen besseren Weg zu tun dies.
Es gibt einige unbeabsichtigte Konsequenzen. Wenn Sie nicht angemeldet sind und versuchen, sich anzumelden, muss ein Benutzer die Seite aktualisieren, bevor er auf die entsprechende Seite umgeleitet wird. Ich habe in den Simple-Auth-Code geschaut und eine transitionTo-Funktion verhält sich nicht wie erwartet.
sessionAuthenticated() { const attemptedTransition = this.get('session.attemptedTransition'); if (attemptedTransition) { attemptedTransition.retry(); this.set('session.attemptedTransition', null); } else { this.transitionTo(Configuration.routeAfterAuthentication); } }
this.transitionTo(Configuration.routeAfterAuthentication);
ist die Linie, die nicht Übergang ist. Ich habe überprüft, dass Configuration.routeAfterAuthentication
richtig eingestellt ist.
Ich kann ein Neuladen auf der Login-Route oder wo immer Route ein Benutzer navigiert zu zwingen, aber (ich denke), wegen der Frage 2 oben, ich stoße in unendliche Weiterleitungen.
Ich würde gerne so etwas wie die folgenden Funktionen ausführen:
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import UnauthenticatedRouteMixin from 'ember-simple-auth/mixins/unauthenticated-route-mixin';
const { service } = Ember.inject;
var mixin;
if (service('session').isAuthenticated){
mixin = AuthenticatedRouteMixin;
}
else{
mixin = UnauthenticatedRouteMixin;
}
export default Ember.Route.extend(mixin, { ... })
Ich bin jedoch Informationen nicht von der Sitzung zu bekommen. Ich bin mir nicht sicher, aber vielleicht muss die spezifische Ember.Route
geladen werden, um diese Informationen zu bekommen.
Jede Hilfe würde sehr geschätzt werden.
aktualisieren
ich auf der Login-Route einen Reload zwingen kann oder wo auch immer Route einen Benutzer navigiert, aber (ich glaube), weil der Ausgabe 2 oben, ich bin mit in den unendlichen Umleitungen.
Ich habe diesen Teil herausgefunden. Ich habe nur einen Schlüssel/Wert in der Sitzung festgelegt. Wenn dies der Fall ist, laden Sie den Schlüssel neu und entfernen Sie ihn, oder legen Sie ihn auf false fest, sodass das erneute Laden nur einmal erfolgt.
Dank Lux. Das hat nicht für mich funktioniert. Ich kann das Sitzungsupdate so sehen, wie ich es erwarte, aber 'this.transitionTo (Configuration.routeIfAlreadyAuthenticated);' geht nicht zu der in 'Configuration.routeIfAlreadyAuthenticated' angegebenen Route. Ich muss noch auf Aktualisieren klicken, um die Umleitung zu sehen. – user2517182
@ user2517182 dann stimmt etwas mit Ihrer Konfiguration oder Route nicht. Versuchen Sie, ein nicht funktionierendes Twiddle bereitzustellen. – Lux
Ich habe meinen Code überarbeitet und etwas ähnliches wie hier gemacht. Das hat mein Problem gelöst. Vielen Dank! – user2517182