AngularJS - store-basic-Authentifizierung "login"
Ich bin schlug meinen Kopf an der Wand - ich bin relativ neu in der Arbeit mit APIs und haben noch etwas zu tun, die eine Authentifizierung erfordert.
Bin ich stecken mit dem senden einer POST-Anfrage an die API. Der Endpunkt für die Erstellung eines Inhalts ist:
/entity/node
Kann ich senden Sie eine erfolgreiche POST-Anfrage, wenn ich senden Sie die folgende:
headers: {
"Authorization": "Basic YWRtaW46MTIzcXdl", //admin:123qwe
},
Das problem, das ich habe, ist mit Genehmigung. Ich bin Angabe von Basic und dann eine codierte Zeichenfolge hier, das ist mein admin-login. Wenn also hardcoded, kann ich posten.
Meine Frage - wenn der Benutzer sich anmeldet richtig, ich brauche den Header so zu setzen, dass alle zukünftigen post-requests arbeiten. Wie kann ich dies in AngularJS?
Habe ich versucht, die übergabe eines dynamisch generierten code:
"Authorization": "Basic " + auth,
wo auth ist eine base64-codierte user:pass, aber das funktioniert nicht. Mein denken ist, dass dieser Wert muss irgendwo gespeichert sind, zum Abruf, Wann immer Sie eine POST-Anforderung aus. Aber wie?
- Haben Sie irgendwelche Informationen darüber, wie Sie Drupal ' s REST-Api authentifiziert? Ich meine, OAuth-token, was auch immer?
- Ich kann nicht OAuth installiert. Ich versuche, die Standardauthentifizierung zu verwenden, die im Kern, aber ich will nicht zu haben, um einen base64-string - es muss eine Antwort sein.
- Kann man Daten erfolgreich aus der api mit einem anderen app? Wenn ja, würde ich prüfen, die Netzwerk-traffic mit Fiddler sehen, was passiert.
- Sie können variable_set zum speichern der login-Wert zeitlich (und sicher sein, dass, wenn sich der Benutzer abmeldet löschen).
- Wenn Sie versucht, die dynamische version, was genau falsch gelaufen? Wie kam es scheitern? Was war anders zwischen den beiden Anfragen und/oder die Art, wie Sie gebaut wurden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rufen Sie diese, sobald Sie ein token:
BEARBEITEN:
Habe es nicht getestet, aber es sollte etwas sein wie:
und dann injizieren
authService
zu Ihrer app config und rufenauthService.configure()
In solchen Fällen, was ich normalerweise getan haben, ist speichern keine login-token oder solche Anmeldeinformationen(nicht Passwörter) in cookies und dann Zugriff über ein eckiges service. Da angular-services sind singletons der Wert wird beibehalten, die überall in der app, es sei denn, die Seite wird neu geladen, die ist, wo das cookie ins Spiel kommt.
Ein Beispiel Dienst, könnte wie folgt Aussehen
Sobald Sie einen solchen service bereit, eine eckige Abfangjäger zum abfangen der Anfragen, auf die Sie möchten, fügen Sie den auth-Header.
https://docs.angularjs.org/api/ng/service/$http
Verwenden
angular-local-storage
speichern Sie Ihre token im client-browser, wenn Benutzer eine erfolgreiche Anmeldung.Winkel-local-storage
sobald Sie das token in den lokalen Speicher, Sie sind in der Lage, um es für die Benutzer.
wie diese :
localStorageService.get('authorizationData');
Nun verwenden
authInterceptorService
zu setzen-header für jede Anforderunghier erhalten Sie alle details : AngularJS-Token-Authentifizierung verwenden ASP.NET Web API 2, Owin und Identität
angular js ist einfach javascript
zuerst müssen Sie speichern Sie Ihre token in den lokalen Speicher
nachdem Sie das abrufen von token, dann werden Sie es speichern im lokalen Speicher
dann fügen Sie es zu $httpProvider.Abfangjäger, so dass jede Anfrage wird Ihre grundlegende Berechtigung
Derzeit arbeite ich an einem Projekt, das sich mit dem gleichen problem wie deins. Wie gut, dass der neue Schwenk-framework mich, ich in der Regel versuchen, eine Lösung zu finden, die von anderen erstellt wurden und anpassen an meine Bedürfnisse.
Winkel-basicauth
Befassen sich mit der grundlegenden Berechtigung, ich habe gefunden ein Winkel-Modul hier gehostet: https://github.com/iandotkelly/angular-basicauth.
Es beschreibt die Konfiguration klar, so werde ich nicht zu umschreiben, dass es alle hier. Ich denke, es dient alles dem Zweck, Sie würde es. Jedoch, wenn Sie einige schon gemacht Lösung, die Sie akzeptieren müssen, es ist Nachteile. Die, die ich wirklich nicht mag, ist:
Da das Modul von mir gepostete beruht auf der MIT-Lizenz sind Sie frei, schnappen Sie sich den source-code und mit ihm spielen, wie Sie möchten. Die Lösung ist ziemlich einfach und ich glaube zu modifizieren, ist nicht eine große Sache. Zum Beispiel, weil ich gefunden habe die cookie-Teil inakzeptabel, ich glaube nicht, verwenden cookies überhaupt.
Mit diesem Ansatz, den Sie ändern müssen, um es in einer Weise, die Sie halten alle gespeicherten Anmeldeinformationen in das eckige-service/factory (ie.
authService
) in eine variable und Lesen Sie den Wert, wenn nötig.Auf der anderen Seite, ist diese änderung bringt eine gewisse Frage der manuelle reload der Seite. In einem solchen Fall, da Sie neu initialisieren Winkel-Staaten, wird der Benutzer erneut gefragt, um sich in Ihrem Antrag. Leider gibt es keine Möglichkeit (die ich kenne), die sich mit basic-auth und ermöglicht das speichern der Anmeldeinformationen sicher. Und da gibt es keine Sitzung, die Sie könnten versuchen, die Daten wiederherzustellen, Sie sind im Grunde die Wahl zwischen unsicheren lokalen Speicher oder in-memory-variable (das scheint sicher genug für mich).
Warnung
Mithilfe basic-Authentifizierung Sie natürlich akzeptieren, alle die Einschränkungen, die es hat, und natürlich der größte sein würde, die
base64
Kodierung Ihrer Anmeldeinformationen an, die leicht zu entschlüsseln. Ohne ein gesichertes Protokoll, die Sie tatsächlich in die Daten der Benutzer fast in der gleichen Weise, als würden Sie durch den Versand als plain-text.