AngularJS е популярна предна JavaScript рамка, която позволява на разработчиците да създават мощни и мащабируеми уеб приложения. Един от важните аспекти на изграждането на уеб приложения е управлението на потребителските данни и удостоверяването. В тази статия ще разгледаме някои от най-добрите практики и техники за управление на потребителски данни и удостоверяване в AngularJS приложение.
Ще обхванем теми като използване на JWT за удостоверяване, съхраняване на потребителски данни в бисквитки или локално хранилище, използване на услугата AngularJS $cookies
за управление на бисквитки, използване на прехващачи на AngularJS за обработка на оторизация, внедряване на удостоверяване от страна на сървъра и управление на сесии и използване на защитена връзка. Имайки предвид тези най-добри практики и техники, можете да помогнете да гарантирате, че вашето AngularJS приложение е защитено и добре управлявано и осигурява страхотно потребителско изживяване за вашите потребители.
Ние ще предоставим примери за кодове, които да вървят заедно с всяка най-добра практика и техника, така че можете да видите как да ги внедрите във вашето AngularJS приложение.
JWT удостоверяване
Първо, трябва да добавите необходимите библиотеки към вашия проект чрез npm
npm install angular-jwt --save
Ще приемем, че вече сте внедрили вашия механизъм за влизане, сега нека започнем с дефинирането на услугата за оторизиране на JWT въз основа на идентификационните данни на потребителя.
angular.module('app').service('AuthService', function($http, $q, $state, $rootScope, jwtHelper) { var vm = this; // login user vm.login = function(username, password) { return $http.post('/api/authenticate', {username: username, password: password}); }; // add token to local storage function setToken(token) { return localStorage.setItem('id_token', token); } // retrieve token from local storage function getToken() { return localStorage.getItem('id_token'); } // check if token is expired function isTokenExpired(token) { return jwtHelper.isTokenExpired(token); } // get a decoded token from local storage function getDecodedToken() { var token = getToken(); if (token) { return jwtHelper.decodeToken(token); } else { return false; } } // logout user and remove token vm.logout = function () { localStorage.removeItem('id_token'); $rootScope.currentUser = false; $state.go('login'); }; // authenticate user token vm.authenticate = function () { var token = getToken(); if (token && !isTokenExpired(token)) { $rootScope.currentUser = getDecodedToken(); } else { vm.logout(); } } //Check if a user is authenticated vm.isAuthenticated = function () { var token = getToken(); return token && !isTokenExpired(token); } // get a token for authenticated user vm.getToken = function () { return getToken(); } // authorize user from JWT token vm.authorize = function () { $http.defaults.headers.common.Authorization = 'Bearer ' + getToken(); $rootScope.isAuthenticated = vm.isAuthenticated(); $rootScope.currentUser = getDecodedToken(); } });
Ето как да използвате AuthService за заявки за удостоверяване.
angular.module('app').controller('LoginCtrl', function(AuthService) { var vm = this; vm.login = function() { AuthService.login(vm.username, vm.password) .success(function(response) { AuthService.setToken(response.token); AuthService.authenticate(); }) .error(function() { alert('Login failed.'); }); }; });
Използване на услугата $cookies
Можете да съхранявате потребителски данни като потребителско име или всякакви други настройки в бисквитки и да осъществявате достъп до тях в приложението си с помощта на услугата $cookies.
angular.module('app').controller('MainCtrl', function ($scope, $cookies) { // set cookie $cookies.put('username', 'JohnSmith'); // get a cookie $scope.username = $cookies.get('username'); });
Използване на прехващачи на AngularJS
Прехващачите са страхотен инструмент за автоматично добавяне на токен или друг хедър към всяка заявка, която вашето Angular приложение прави.
angular.module('app').factory('AuthInterceptor', function($q, $location) { return { request: function (config) { config.headers = config.headers || {}; var token = localStorage.getItem('id_token'); if (token) { config.headers.Authorization = 'Bearer ' + token; } return config; }, responseError: function(response) { if (response.status === 401 || response.status === 403) { localStorage.removeItem('id_token'); $location.path('/login'); } return $q.reject(response); } }; }); angular.module('app').config(function($httpProvider) { $httpProvider.interceptors.push('AuthInterceptor'); });
В заключение, управлението на потребителските данни и удостоверяването е важен аспект от изграждането на AngularJS приложения. Следвайки най-добрите практики и техники, описани в тази статия, разработчиците могат да създават приложения, които са сигурни, добре управлявани и осигуряват страхотно потребителско изживяване.