Verwirrend $locationChangeSuccess und $stateChangeStart
Ich versuche zu tun, einige Authentifizierung mit AngularUI-Router. $urlRouter.sync()
sieht aus wie genau das was ich brauche. Das ist jedoch nur verfügbar, wenn ich abfangen $locationChangeSuccess
. Aber wenn ich das Tue, ist $state.current.name
leer ist, während ich möchte, dass es den aktuellen Stand.
Hier mein code bisher:
$rootScope.$on('$locationChangeSuccess', function(event, next, nextParams) {
event.preventDefault();
if ($state.current.name === 'login') {
return userService.isAuthenticated().then(function(response) {
var authenticated;
authenticated = response.authenticated;
return alert(authenticated);
});
}
});
Irgendwelche Hinweise, was ich falsch mache?
Err... Was
Dann kann ich nicht verwenden
Können Sie teilen, was ist die Anforderung??
viele Beispiele um zu demonstrieren, dass." wo?
$stateChangeSuccess
?Dann kann ich nicht verwenden
urlRouter.sync()
$state.current.name
nur leer auf der ersten Seite zu laden. Alle Zustandsänderungen ausgelöst, nachdem ein Staat Namen. Wenn alles, was Sie tun müssen, ist die Authentifizierung erzwingen, dann hören Sie auf $stateChangeStart
- Sie brauchen nicht zu befürchten $urlRouter.sync()
. Es gibt viele Beispiele um zu demonstrieren, dass.Können Sie teilen, was ist die Anforderung??
viele Beispiele um zu demonstrieren, dass." wo?
InformationsquelleAutor Shamoon | 2014-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, zu gehen, mehr "
UI-Router
Weg". Wir sollten Sie nutzen$rootScope.$on('$stateChangeStart'
Veranstaltung, wo$state.current
wäre richtig gestellt. Hier ist ein funktionierendes BeispielLet ' s beobachten einfache (aber nicht naiv) Lösung, die erweitert werden könnte, um jedes Grad höher. Auch wenn Sie diesen Ansatz möchten, hier ist viel mehr umfassende Umsetzung: angular-ui-router-login-Authentifizierung
Erstens, wir haben unser user-service wie folgt definiert:
So, wir verwenden async (hier
$timeout
) zu ladenuser
Objekt bilden ein server. In unserem Beispiel wird es eine Eigenschaft, die{isAuthenticated: false }
, die verwendet werden, um zu überprüfen, ob authentifiziert ist.Dort ist auch der sync-Methode
isAuthenticated()
welche, bis der Benutzer geladen wird und erlaubt - immer wiederfalse
.Und das wäre, dass unsere Hörer von der
'$stateChangeStart'
Veranstaltung:Was wir prüfen zuerst, ist, wenn der Benutzer bereits geladen und authentifiziert (
var isAuthenticated = ...
). Als Nächstes werden wir geben, grün zu jeder öffentlichen Methode. Dies geschieht mit derdata {}
Eigentum des Staates, der Objekt-definition (siehe Befestigen Sie Benutzerdefinierte Daten an Staatliche Objekte)Und das ist es. Im Falle von Staaten, definiert wie in einem unten snippet, das wir erleben können:
'public'
,'home'
dürfen niemanden'private'
,'private'
wird redirect auf login, wennisAuthenticated === false
den
'login'
in diesem Beispiel liefert eine schnelle Art und Weise, wie die Umstellung isAuthenticated on/offÜberprüfen Sie, dass alle hier
Einige andere Ressourcen:
data
und AuthentifizierungWenn ich verstehe deine Frage richtig, die gute Nachricht ist gelöst 😉 Eckig
provider
Modell (einschließlichservices
undfactories
) wird angetrieben durch singleton - Muster. SouserService
in unserem Beispiel würde instanziiert werden nur einmal, nur einmal rufen Sie den server (hier die$timeout
) und jedem nächsten Aufruf wird es wiederuser
lokale variable... hilft es?ops.. ja, sorry hab ich verwechselt mit getAuthObj und isAuth.. danke
InformationsquelleAutor Radim Köhler