AngularJS Authentication + RESTful API
Zostało to omówione w kilku różnych pytaniach iw kilku różnych samouczkach, ale wszystkie poprzednie zasoby, z którymi się zetknąłem, nie trafiły w sedno.
W skorupce orzecha muszęZaloguj się przez POST zhttp://client.foo
dohttp://api.foo/login
Mieć „zalogowany” stan GUI / komponentu dla użytkownika, który zapewnialogout
trasaByć w stanie „zaktualizować” interfejs użytkownika, gdy użytkownik wyloguje się / wyloguje.To było najbardziej frustrująceZabezpiecz moje trasy, aby sprawdzić stan uwierzytelniony (jeśli będą tego potrzebować) i odpowiednio przekieruj użytkownika na stronę logowaniaMoje problemy sąZa każdym razem, gdy przechodzę na inną stronę, muszę nawiązać połączenieapi.foo/status
aby ustalić, czy użytkownik jest zalogowany. (ATM używam Express do tras) Powoduje to czkawkę, gdy Angular określa rzeczy takie jakng-show="user.is_authenticated"
Po pomyślnym zalogowaniu / wylogowaniu muszę odświeżyć stronę (nie chcę tego robić), aby wypełnić takie rzeczy, jak{{user.first_name}}
lub w przypadku wylogowania, opróżnij tę wartość.// Sample response from `/status` if successful
{
customer: {...},
is_authenticated: true,
authentication_timeout: 1376959033,
...
}
Co próbowałemhttp://witoldsz.github.io/angular-http-auth/1http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/2https://github.com/mgonto/restangular (W moim życiu nie mogłem się dowiedzieć, jak to zrobićPOST
zpost data
i niequery params
. Doktorzy nie znaleźli nic w tej sprawie.Dlaczego czuję, że tracę rozumWygląda na to, że każdy tutorial opiera się na jakiejś bazie danych (wiele rozwiązań Mongo, Couch, PHP + MySQL, ad infinitum), a żaden z nich nie opiera się wyłącznie na komunikacji z API RESTful w celu utrzymania zalogowanych stanów. Po zalogowaniu wysyłane są dodatkowe POST / GETwithCredentials:true
, więc to nie problemNie mogę znaleźć ŻADNYCH przykładów / tutoriali / repozytoriów, które wykonują Angular + REST + Auth, sans backend language.Nie jestem zbyt dumnyWprawdzie jestem nowy w Angular i nie zdziwiłbym się, jeśli podejdę do tego w absurdalny sposób; Byłbym podekscytowany, gdyby ktoś zaproponował alternatywę - nawet jeśli jest to zupa na orzechy.
używamExpress
głównie dlatego, że naprawdę kochamJade
iStylus
- Nie jestem mężatkąExpress
„routing i zrezygnuję, jeśli to, co chcę zrobić, jest możliwe tylko dzięki routingowi Angulara.
Z góry dziękuję za wszelką pomoc, jaką ktokolwiek może zapewnić. I proszę, nie pytaj mnie o Google, ponieważ mam około 26 stron fioletowych linków. ;-)
1To rozwiązanie opiera się na makiecie $ httpBackend firmy Angular i nie jest jasne, jak sprawić, by rozmawiał z rzeczywistym serwerem.
2To było najbliższe, ale ponieważ mam istniejące API, z którym muszę się uwierzytelnić, nie mogłem użyć „localStrategy” paszportu i wydawało sięszalony napisać usługę OAUTH ... której tylko zamierzałem użyć.