Momentan baue ich eine AngularJS-basierte Anwendung auf Ruby on Rails und verwende Devise zur Authentifizierung. Ich habe den Server richtig reagieren, wenn ein Benutzer erfolgreich authentifiziert und wenn die Authentifizierung fehlschlägt. Ich denke, meine Frage ist, mit $ cookieStore, was ist die beste Methode zu wissen, ob ein Benutzer angemeldet ist oder nicht? Es gibt ein Cookie, das von Rails als "myapp_session" gesetzt wird, aber diese Sitzung bedeutet nicht unbedingt, dass ein Benutzer angemeldet ist. Auf der Suche nach Ideen zur Verwendung von AngularJS, um die Benutzer online/offline zu verwalten. Ich werde weiterhin sicherstellen, dass Anfragen, die eine Autorisierung erfordern, unabhängig von der Lösung vom Backend autorisiert werden.Bewährte Methode, um sicherzustellen, dass Benutzer mit cookieStore und AngularJS an- und abgemeldet werden
Antwort
Sie können eine Direktive erstellen, die den angemeldeten Benutzer beim Laden der Anwendung einrichtet, beispielsweise um die aktuelle Benutzersitzung auf Ihrem Server anzufordern.
angular.module('Auth', [
'ngCookies'
])
.factory('Auth', ['$cookieStore', function ($cookieStore) {
var _user = {};
return {
user : _user,
set: function (_user) {
// you can retrive a user setted from another page, like login sucessful page.
existing_cookie_user = $cookieStore.get('current.user');
_user = _user || existing_cookie_user;
$cookieStore.put('current.user', _user);
},
remove: function() {
$cookieStore.remove('current.user', _user);
}
};
}])
;
Und in Ihrer run
Methode in AppController
gesetzt:
.run(['Auth', 'UserRestService', function run(Auth, UserRestService) {
var _user = UserRestService.requestCurrentUser();
Auth.set(_user);
}])
Natürlich, wenn eine Anfrage an den Server ein Http Status 401 - Unauthorized
zurückzukehren, müssen Sie den Auth.remove()
Dienst anrufen, um den Benutzer von Cookies zu entfernen und umleiten die Anmeldeseite des Benutzers.
Ich benutze diesen Ansatz und funktioniert sehr gut. Sie können auch die localStorage
verwenden, aber die Benutzerdaten werden für eine lange Zeit beibehalten. Sofern Sie kein Ablaufdatum für diese Authentifizierung festlegen, sehe ich keine optimale Vorgehensweise.
Beachten Sie überprüfen, immer die Anmeldeinformationen des Benutzers auf dem Server site =)
[EDIT]
Zum Anhören 401 - Unauthorized
Server-Antwort, können Sie einen Abfangjäger auf $http
Anfrage gestellt, wie dies:
.config(['$urlRouterProvider', '$routeProvider', '$locationProvider', '$httpProvider', function ($urlRouterProvider, $routeProvider, $locationProvider, $httpProvider) {
$urlRouterProvider.otherwise('/home');
var interceptor = ['$location', '$q', function ($location, $q) {
function success(response) {
return response;
}
function error(response) {
if (response.status === 401) {
$location.path('/login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
return function (promise) {
return promise.then(success, error);
};
}];
$httpProvider.responseInterceptors.push(interceptor);
}])
Jeder Anruf mit 401
Antwort, wird der Benutzer auf Login-Seite bei /login
pa umgeleitet werden th.
Sie ein gutes Beispiel finden here
Sie das Cookie auf Ihrem Login Rückruf einstellen können mit
$cookieStore.put('logged-in', some_value)
Sie prüfen, wenn sie Ihre Website mit
.run(function($cookieStore) {
if ($cookieStore.get('logged-in') === some_value) {
let him enter
}
else {
you shall not pass
}
});
Dort geben könnte mehr "richtige" Wege sein, aber das funktioniert.
Wenn Sie Probleme machen die akzeptierte Antwort Arbeit haben, vorsichtig sein, dass ab Angular 1.3, eine richtige Art und Weise einen neuen Abfangjäger der Zugabe ist, indem es $ Zugabe httpProvider.interceptors, so statt:
$httpProvider.responseInterceptors.push(interceptor);
Verwendung:
$httpProvider.interceptors.push(interceptor);
- 1. Unterschied zwischen $ cookiestore und $ cookies in angularjs
- 2. angularjs $ cookieStore size limit
- 3. Wie können PublishSubject und BehaviorSubject abgemeldet werden?
- 4. SPGridView, Daten und korrekte Methode, um sicherzustellen, dass Daten sicher sind
- 5. @Background und Bildschirm Rotation bei Verwendung von AndroidAnnotations, um sicherzustellen, dass die Rückrufe erhalten werden?
- 6. Ist !! eine bewährte Methode, um einen Truthy-Wert zu überprüfen
- 7. Die beste Methode, um sicherzustellen, dass ein untergeordnetes Paket mit einem Fehler fehlschlägt
- 8. Bewährte Methode, um Konfigurations-/Benutzerinformationen in .NET-App beizubehalten
- 9. Anwendung kann nicht abgemeldet werden
- 10. ASP.NET 5 Identity 3 Benutzer werden nach einiger Zeit abgemeldet
- 11. Methoden der Eltern- und Kindklassen deklarieren, um sicherzustellen, dass sie zusammen laufen
- 12. mit idiotensicher, um sicherzustellen, dass Enddatum ist größer als Startdatum
- 13. Einfache Bash Shell-Skript, um sicherzustellen, dass zwei Argumente
- 14. Test, um sicherzustellen, dass die Benutzereingabe doppelt ist und größer als Null ist?
- 15. Die beste Möglichkeit, Ausnahmen mit Assert zu testen, um sicherzustellen, dass sie ausgelöst werden
- 16. Verwenden Sie passthru, um sicherzustellen, dass das Cmdlet fertig ist
- 17. Best Practice, um sicherzustellen, dass ein authentifizierter Benutzer berechtigt ist, auf eine Ressource zuzugreifen - Spring mvc, Spring Security, Hibernate
- 18. angularJS: Warte auf ng-if, um sicherzustellen, dass das DOM fertig ist.
- 19. Was ist der beste Weg, um sicherzustellen, dass Primärschlüssel und Fremdschlüssel sich niemals schneiden?
- 20. Einfache Formel, um sicherzustellen, dass zwei Teams durcheinander geraten?
- 21. Soll Marshal.FreeHGlobal in einen finally-Block platziert werden, um sicherzustellen, dass Ressourcen entsorgt werden?
- 22. DAG - Algorithmus, um sicherzustellen, dass es eine einzige Quelle und eine einzige Senke gibt
- 23. Bewährte Methode zur Überprüfung der Null- und Leersammlung in Java
- 24. Was muss in einer Struktur außer Kraft gesetzt werden, um sicherzustellen, dass die Gleichstellung korrekt funktioniert?
- 25. Bewährte Methode, um alle Benutzer für nur eine Seite zu autorisieren
- 26. Angularfire2: Abmeldeausnahme und bewährte Methoden
- 27. Wie synchronen Laden in AngularJS, um sicherzustellen, app.js
- 28. Wirklich bewährte Methode, IBOutlet-Ansichtselemente beizubehalten?
- 29. Vorhandene Hilfsmethode, um sicherzustellen, dass alle Auflistungselemente nicht null sind
- 30. AngularJS .Success Methode und .then Methode
Dies ist eine fantastische Antwort. Danke für die Einsicht. Es war nützlich. –
Ich bekomme eine Fehlermeldung über 'Unbekannter Provider: $ urlRouterProvider' mit diesem. –
Verwenden Sie Winkel v1.2? –