Wpis z mikrobloga

#programowanie #angularjs

Jak zrobić autoryzację w Angularze? Jedna strona ma być dostępna dla wszystkich, a druga tylko dla zalogowanego użytkownika (obsługa przez ngrRoute).

W tych wszystkich tutorialach jest autoryzacja w Angularze w ten sposób:
https://www.theodo.fr/blog/2015/08/handling-basic-route-authorization-in-angularjs/
http://codepen.io/anon/pen/OVrvVX

Ale to jest złe rozwiązanie, bo użytkownik może wejść sobie w źródło i zobaczyć to do czego nie ma dostępu (nawet jak przeniosę tego HTML-a z template do innego pliku, to też może sobie wejść).

Jakie inne podejście? Jak stawiamy to na serwerze i mamy API REST, to jest uwierzytelnianie na serwerze do API. No tak, to aplikacja w Angularze dostępu do danych z API nie będzie miała. Ale sam widok nadal będzie dostępny (nawet jak zrobimy ng-if, to po wejściu w źródło widać formularze itd). Jest to bardzo, bardzo złe rozwiązanie (bo nie wyobrażam sobie, żeby miał do tego dostęp użytkownik).

Jak to rozwiązać?
  • 19
dostep do danych tylko dla zalogowanych


@Nabre: ale mi nie chodzi o dane. Dane z API wiem jak zabezpieczyć. Mi chodzi o zabezpieczenie widoków (template). Żeby nikt kto nie jest zalogowany nie mógł zobaczyć jak wyglądają formularze i układ treści na stronie.

Bo nikt mi nie wmówi, że to jest normalne, że np. zwykli użytkownicy banku mogą zobaczyć jak wygląda panel administratora banku.
@Nabre: @niewidzialnyktos: to nie jest normalne.

Przykładowo, jest strona na której są tutoriale dostępne po zalogowaniu. Użytkownik po zalogowaniu ma mieć dostęp do tutoriali (to są zwykłe strony z tekstem i obrazkami w HTML). A publicznie mają być niedostępne.
Nie mogę trzymać tych tutoriali w plikach HTML? Muszę je wrzucić na sztywno do kodu (bo bazy danych na 5 plików HTML nie potrzebuję) i potem zwracać w API stringa z
@niewidzialnyktos: nikogo nie chcę zgrywać, tylko potrzebuję zrobić coś co np. w PHP dało się zrobić bez problemu, a tutaj nie wiem jak. A na pewno się jakoś da (bo tam gdzie jest Angular w aplikacjach w internecie to jednak nie mogę podglądać formularzy - więc to nie jest normalne, że u mnie się da).

dopóki backend nie zwraca szablonów to tak będzie

większe aplikacje serwują widoki z backendu


Mam wrzucony
@niewidzialnyktos: LOL, jakie podejście profesora?
Chcę zrobić logowanie w Angularze. Nie chcę, żeby ktoś wbijał mi w moje widoki. W PHP to umiem, a Angularze nie umiem. Nie wiem gdzie widziałeś takiego profesora.
Aplikacja która stoi na frontendzie - klient ma do niej dostęp, nie ma dostępu tylko do danych. Tak - to jest normalne, serwujesz templaty z backendu - klient ma dostęp do aplikacji na froncie (TAK CAŁEJ) oprócz tego co serwujesz z backendu


@niewidzialnyktos: no właśnie ja nie chcę, żeby user miał dostęp do całej aplikacji. Czy to jest za duże wymaganie? Zastanawiam się tylko jak to zabezpieczyć.

oprócz tego co serwujesz
@mk321: Dalej masz problem ze zrozumieniem tego, że to co jest po stronie klienta może być rozgrzebane i dlatego istnieją takie mechanizmy jak obfuskacja (ostatecznie i tak można ten proces odwrócić). Po co jest autoryzacja? Po to, żeby backend zwrócił dane bo inaczej użytkownik prawdopodobnie NIC nie zrobi w naszej aplikacji, czasami SPA serwuje się z backendu nie po to żeby 'nie pokazywać użytkownikowi naszych szablonów' tylko żeby przyspieszyć działanie aplikacji.
@mk321:
@niewidzialnyktos: kolega ma racje.

nie rozumiesz troche jak dziala angularjs albo w ogole frameworki jsowe. tworzysz templatki ktore same z siebie nie powinny zawierac zadnych danych, dopiero zautoryzowane polaczenie do API pozwala ci na uzyskanie informacji. Uzytkownik moze zobaczyc kazda templatke - BO TO MU I TAM NIC NIE DA. Jezeli nie chcesz by tak sie dalo - musisz stosowac server side rendering (chociaz to nie jest jego zalozenie).
@mk321: nie mam teraz czasu, żeby poszukać, ale chyba da się w angularze dynamicznie ładować templejty. Możesz wtedy w kontrolerze dla danego route wysłać request do serwera, żeby zapodał template(jeśli dany użytkownik ma do tego prawa), który chcesz wrzucić w router-outlet czy tam ng-view. Po ściągnięciu tego html, robisz z nim co tam trzeba zrobić, żeby się go dało wstrzyknąć w odpowiednie miejsce i dopiero potem wysyłasz zapytanie o dane do