Jestem nowy w AngularJS i przejrzałem ich samouczek i poczułem to.
Mam gotowe zaplecze dla mojego projektu, w którym każdy z REST
punktów końcowych musi zostać uwierzytelniony.
Co chcę zrobić
a.) Chcę mieć jedną stronę dla mojego projektu http://myproject.com
.
b.) Gdy użytkownik trafi na adres URL w przeglądarce, na podstawie tego, czy jest zalogowany, czy nie, zostaje mu wyświetlona strona główna / widok lub strona logowania / widok pod tym samym adresem URL http://myproject.com
.
c.) jeśli użytkownik nie jest zalogowany, wypełnia formularz, a serwer ustawia USER_TOKEN
sesję, więc wszystkie dalsze żądania do punktów końcowych będą uwierzytelniane na podstawieUSER_TOKEN
Moje nieporozumienia
a.) Jak mogę obsługiwać uwierzytelnianie po stronie klienta za pomocą AngularJS? Widziałem tutaj i tutaj, ale nie rozumiem, jak ich używać
b.) Jak mogę przedstawić użytkownikowi różne widoki na podstawie tego, czy użytkownik jest zalogowany, czy nie pod tym samym adresem URLhttp://myproject.com
Używam angular.js po raz pierwszy i naprawdę nie wiem, jak zacząć. Wszelkie porady i / lub zasoby są bardzo mile widziane.
źródło
Odpowiedzi:
Utworzyłem repozytorium github podsumowujące zasadniczo ten artykuł: https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec
ng-login repozytorium Github
Plunker
Postaram się wyjaśnić jak najlepiej, mam nadzieję, że pomogę niektórym z was:
(1) app.js: Tworzenie stałych uwierzytelniania w definicji aplikacji
(2) Usługa autoryzacji: Wszystkie poniższe funkcje są zaimplementowane w usłudze auth.js. Usługa $ http służy do komunikacji z serwerem w celu przeprowadzenia procedur uwierzytelniania. Zawiera również funkcje dotyczące autoryzacji, czyli czy użytkownik może wykonać określoną akcję.
(3) Sesja: singleton do przechowywania danych użytkownika. Wdrożenie tutaj zależy od Ciebie.
(4) Kontroler nadrzędny: Potraktuj to jako „główną” funkcję aplikacji, wszystkie kontrolery dziedziczą po tym kontrolerze i jest to podstawa uwierzytelniania tej aplikacji.
(5) Kontrola dostępu: Aby odmówić dostępu na niektórych trasach, należy wdrożyć 2 kroki:
a) Dodaj dane o rolach, które mają dostęp do każdej trasy, w usłudze $ stateProvider routera ui, jak widać poniżej (to samo może działać dla ngRoute).
b) W $ rootScope. $ on ('$ stateChangeStart') dodaj funkcję, aby zapobiec zmianie stanu, jeśli użytkownik nie jest autoryzowany.
(6) Przechwytywacz uwierzytelniania: jest zaimplementowany, ale nie można go sprawdzić w zakresie tego kodu. Po każdym żądaniu $ http ten przechwytywacz sprawdza kod stanu, jeśli zostanie zwrócony jeden z poniższych, rozgłasza zdarzenie, aby zmusić użytkownika do ponownego zalogowania.
PS Błąd z autouzupełnianiem danych formularza, jak podano w pierwszym artykule, można łatwo uniknąć, dodając dyrektywę zawartą w directives.js.
PS2 Ten kod może być łatwo modyfikowany przez użytkownika, aby umożliwić oglądanie różnych tras lub wyświetlanie treści, które nie miały być wyświetlane. Logika MUSI być zaimplementowana po stronie serwera, to tylko sposób na poprawne pokazanie rzeczy w Twojej aplikacji ng-app.
źródło
authService.login() = [...]
te nawiasy kwadratowe będą oznaczać coś takiego$http.get(url, {uID, pwd}
? ~~ ok, zajrzałem do plunkera, było tak, jak powiedziałem XDPodoba mi się to podejście i zaimplementowałem je po stronie serwera bez wykonywania jakichkolwiek czynności związanych z uwierzytelnianiem na front-endzie
Poszukaj komentarza „Andrew Joslina”.
https://groups.google.com/forum/?fromgroups=#!searchin/angular/authentication/angular/POXLTi_JUgg/VwStpoWCPUQJ
źródło
Odpowiedziałem tutaj na podobne pytanie: AngularJS Authentication + RESTful API
Napisałem moduł AngularJS dla UserApp, który obsługuje chronione / publiczne trasy, przekierowywanie przy logowaniu / wylogowywaniu, bicie serca do sprawdzania statusu, przechowuje token sesji w pliku cookie, zdarzenia itp.
Możesz:
https://github.com/userapp-io/userapp-angular
Jeśli używasz UserApp, nie będziesz musiał pisać żadnego kodu po stronie serwera dla danych użytkownika (więcej niż walidacja tokena). Weź udział w kursie Codecademy, aby go wypróbować.
Oto kilka przykładów tego, jak to działa:
Jak określić, które trasy mają być publiczne, a która trasa to formularz logowania:
.otherwise()
Trasa powinna być ustawiona na którym użytkownicy mają zostać przekierowane po zalogowaniu. Przykład:$routeProvider.otherwise({redirectTo: '/home'});
Formularz logowania z obsługą błędów:
Formularz rejestracyjny z obsługą błędów:
Link do wylogowania:
<a href="#" ua-logout>Log Out</a>
(Kończy sesję i przekierowuje do trasy logowania)
Dostęp do właściwości użytkownika:
Dostęp do właściwości użytkownika uzyskuje się za pośrednictwem
user
usługi, np .:user.current.email
Lub w szablonie:
<span>{{ user.email }}</span>
Ukryj elementy, które powinny być widoczne tylko po zalogowaniu:
<div ng-show="user.authorized">Welcome {{ user.first_name }}!</div>
Pokaż element na podstawie uprawnień:
<div ua-has-permission="admin">You are an admin</div>
Aby uwierzytelnić się w usługach zaplecza, wystarczy
user.token()
pobrać token sesji i wysłać go z żądaniem AJAX. Na zapleczu użyj interfejsu API UserApp (jeśli używasz aplikacji UserApp), aby sprawdzić, czy token jest ważny, czy nie.Jeśli potrzebujesz pomocy, daj mi znać!
źródło
W angularjs możesz utworzyć część interfejsu użytkownika, usługę, dyrektywy i całą część angularjs, która reprezentuje interfejs użytkownika. To fajna technologia do pracy.
Jak każdy, kto jest nowy w tej technologii i chce uwierzytelnić „użytkownika”, sugeruję, aby zrobić to z mocą C # Web API. w tym celu możesz skorzystać ze specyfikacji OAuth, która pomoże Ci zbudować silny mechanizm bezpieczeństwa do uwierzytelniania użytkownika. po zbudowaniu WebApi z OAuth musisz wywołać ten interfejs API dla tokena:
a gdy otrzymasz token, zażądasz zasobów od angularjs za pomocą tokena i uzyskasz dostęp do zasobu, który jest bezpieczny w interfejsie API sieciowym ze specyfikacją OAuth.
Aby uzyskać dodatkową pomoc, zapoznaj się z poniższym artykułem: -
http://bitoftech.net/2014/06/09/angularjs-token-authentication-using-asp-net-web-api-2-owin-asp-net-identity/
źródło
A co się stanie, jeśli użytkownik złapie de JSON i zmieni wartość bool na True?
Myślę, że nigdy nie powinieneś polegać na kliencie przy tego typu sprawach. Jeśli użytkownik nie jest uwierzytelniony, serwer powinien po prostu przekierować do strony logowania / błędu.
źródło
źródło