Ich bin neu bei AngularJS und habe ihr Tutorial durchgesehen und ein Gefühl dafür bekommen.
Ich habe ein Backend für mein Projekt bereit, wo jeder der REST
Endpunkte authentifiziert werden muss.
Was ich tun möchte
a.) Ich möchte eine einzelne Seite für mein Projekt haben http://myproject.com
.
b.) Sobald ein Benutzer die URL im Browser eingibt, je nachdem, ob der Benutzer angemeldet ist oder nicht, wird ihm eine Startseite / Ansicht oder eine Anmeldeseite / Ansicht unter derselben URL angezeigt http://myproject.com
.
c.) Wenn ein Benutzer nicht angemeldet ist, füllt er das Formular aus und der Server legt eine USER_TOKEN
In-Sitzung fest, sodass alle weiteren Anforderungen an Endpunkte basierend auf authentifiziert werdenUSER_TOKEN
Meine Verwirrungen
a.) Wie kann ich mit der clientseitigen Authentifizierung mit AngularJS umgehen? Ich habe hier und hier gesehen , aber nicht verstanden, wie man sie verwendet.
B.) Wie kann ich dem Benutzer verschiedene Ansichten präsentieren, je nachdem, ob der Benutzer angemeldet ist oder nicht unter derselben URLhttp://myproject.com
Ich benutze angular.js zum ersten Mal und bin wirklich verwirrt, wie ich anfangen soll. Alle Ratschläge und / oder Ressourcen werden sehr geschätzt.
quelle
Antworten:
Ich habe ein Github-Repo erstellt, das diesen Artikel im Wesentlichen zusammenfasst: https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec
ng-login Github repo
Plunker
Ich werde versuchen, es so gut wie möglich zu erklären. Ich hoffe, ich helfe einigen von Ihnen da draußen:
(1) app.js: Erstellung von Authentifizierungskonstanten für die App-Definition
(2) Auth-Dienst: Alle folgenden Funktionen sind im auth.js-Dienst implementiert. Der $ http-Dienst wird verwendet, um mit dem Server für die Authentifizierungsverfahren zu kommunizieren. Enthält auch Funktionen zur Autorisierung, dh wenn der Benutzer eine bestimmte Aktion ausführen darf.
(3) Sitzung: Ein Singleton zum Speichern von Benutzerdaten. Die Implementierung hier hängt von Ihnen ab.
(4) Übergeordneter Controller: Betrachten Sie dies als die "Haupt" -Funktion Ihrer Anwendung, alle Controller erben von diesem Controller und es ist das Rückgrat der Authentifizierung dieser App.
(5) Zugangskontrolle: Um den Zugang auf bestimmten Routen zu verweigern, müssen 2 Schritte ausgeführt werden:
a) Fügen Sie im $ stateProvider-Dienst des UI-Routers Daten zu den Rollen hinzu, die für den Zugriff auf jede Route zulässig sind (siehe unten) (dies gilt auch für ngRoute).
b) Fügen Sie unter $ rootScope. $ on ('$ stateChangeStart') die Funktion hinzu, um eine Statusänderung zu verhindern, wenn der Benutzer nicht autorisiert ist.
(6) Auth Interceptor: Dies ist implementiert, kann jedoch nicht auf den Umfang dieses Codes überprüft werden. Nach jeder $ http-Anforderung überprüft dieser Interceptor den Statuscode. Wenn einer der folgenden Codes zurückgegeben wird, sendet er ein Ereignis, um den Benutzer zu zwingen, sich erneut anzumelden.
PS Ein Fehler beim automatischen Ausfüllen der Formulardaten, wie im ersten Artikel angegeben, kann leicht vermieden werden, indem die in directives.js enthaltene Direktive hinzugefügt wird.
PS2 Dieser Code kann vom Benutzer leicht angepasst werden, um verschiedene Routen anzuzeigen oder Inhalte anzuzeigen, die nicht angezeigt werden sollten. Die Logik MUSS serverseitig implementiert werden. Dies ist nur eine Möglichkeit, die Dinge in Ihrer ng-App richtig darzustellen.
quelle
authService.login() = [...]
eckigen Klammern stehen für so etwas wie$http.get(url, {uID, pwd}
? ~~ ok, schaute in den Plunker, es war wie gesagt XDIch mag den Ansatz und habe ihn serverseitig implementiert, ohne authentifizierungsbezogene Dinge im Front-End zu tun
Suchen Sie nach dem Kommentar von "Andrew Joslin".
https://groups.google.com/forum/?fromgroups=#!searchin/angular/authentication/angular/POXLTi_JUgg/VwStpoWCPUQJ
quelle
Ich habe hier eine ähnliche Frage beantwortet: AngularJS Authentication + RESTful API
Ich habe ein AngularJS-Modul für UserApp geschrieben , das geschützte / öffentliche Routen, das Umleiten beim Anmelden / Abmelden, Herzschläge , das Speichern des Sitzungstokens in einem Cookie, Ereignisse usw. unterstützt.
Sie könnten entweder:
https://github.com/userapp-io/userapp-angular
Wenn Sie UserApp verwenden, müssen Sie keinen serverseitigen Code für das Benutzermaterial schreiben (mehr als das Überprüfen eines Tokens). Nehmen Sie an dem Codecademy-Kurs teil , um ihn auszuprobieren.
Hier sind einige Beispiele, wie es funktioniert:
So legen Sie fest, welche Routen öffentlich sein sollen und welche Route das Anmeldeformular ist:
Die
.otherwise()
Route sollte so eingestellt sein, dass Ihre Benutzer nach der Anmeldung umgeleitet werden sollen. Beispiel:$routeProvider.otherwise({redirectTo: '/home'});
Anmeldeformular mit Fehlerbehandlung:
Anmeldeformular mit Fehlerbehandlung:
Abmeldelink:
<a href="#" ua-logout>Log Out</a>
(Beendet die Sitzung und leitet zur Anmelderoute weiter.)
Zugriff auf Benutzereigenschaften:
Auf Benutzereigenschaften wird über den
user
Dienst zugegriffen , z.user.current.email
Oder in der Vorlage:
<span>{{ user.email }}</span>
Elemente ausblenden, die nur sichtbar sein sollen, wenn Sie angemeldet sind:
<div ng-show="user.authorized">Welcome {{ user.first_name }}!</div>
Zeigen Sie ein Element basierend auf Berechtigungen an:
<div ua-has-permission="admin">You are an admin</div>
user.token()
Um sich bei Ihren Back-End-Diensten zu authentifizieren, rufen Sie einfach das Sitzungstoken ab und senden Sie es mit der AJAX-Anforderung. Verwenden Sie im Back-End die UserApp-API (wenn Sie UserApp verwenden), um zu überprüfen, ob das Token gültig ist oder nicht.Wenn Sie Hilfe benötigen, lassen Sie es mich einfach wissen!
quelle
In anglejs können Sie den UI-Teil, den Dienst, die Anweisungen und den gesamten Teil von anglejs erstellen, der die UI darstellt. Es ist eine schöne Technologie, an der man arbeiten kann.
Als jeder, der neu in dieser Technologie ist und den "Benutzer" authentifizieren möchte, schlage ich vor, dies mit der Leistung von c # web api zu tun. Dazu können Sie die OAuth-Spezifikation verwenden, mit deren Hilfe Sie einen starken Sicherheitsmechanismus zur Authentifizierung des Benutzers aufbauen können. Sobald Sie das WebApi mit OAuth erstellt haben, müssen Sie diese API als Token aufrufen:
Sobald Sie das Token erhalten haben, fordern Sie mithilfe von Token die Ressourcen von anglejs an und greifen auf die Ressource zu, die in der Web-API mit OAuth-Spezifikation sicher ist.
Weitere Informationen finden Sie im folgenden Artikel: -
http://bitoftech.net/2014/06/09/angularjs-token-authentication-using-asp-net-web-api-2-owin-asp-net-identity/
quelle
Und was passiert, wenn der Benutzer de JSON abfängt und den Bool in True ändert?
Ich denke, Sie sollten sich niemals auf die Kundenseite verlassen, um solche Dinge zu tun. Wenn der Benutzer nicht authentifiziert ist, sollte der Server nur zu einer Anmelde- / Fehlerseite umleiten.
quelle
quelle