igorbelikov
@igorbelikov
Fullstack Developer

Как правильно работать с авторизацией в angularjs?

Хочу уточнить - правильная ли следующая логика? Просто жёстко туплю.

При локальной авторизации (по логина и паролю к примеру) получили токен, сохранили его в куки, в сессию на сервере и теперь при каждом переходе на какую-либо страницу или при каком-либо действии - отслыаем аяксом (UPD: добавить в заголовке при запросе) сохраненный в куках токен и сверяем его на сервере?

И такая же логика с oauth, к примеру с google авторизацией - перешли на страничку подтверждения авторизации с помощью записи Гугол, нас перекинуто назад и полученный access_token записали в куки и сессию и далее опять же постоянно сверяем?

Правильная ли это логика и есть ли ещё какие-то варианты решения этой задачи для такого типа приложений как ангуляр?

Спасибо.
  • Вопрос задан
  • 4163 просмотра
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Токен должен пересылаться в заголовках каждого запроса, который требует авторизации.

рекомендую к прочтению дискуссию на SO
Ответ написан
Я сделал так

myApp.factory('AuthInterceptor', ['$window', '$q', '$log',
    function($window, $q, $log) {
        $log.debug('start AuthInterceptor');
        return {
            request: function(config) {
                config.headers = config.headers || {};
                if ($window.localStorage.getItem('key')) {
                    config.headers.Authorization = 'Token ' + $window.localStorage.getItem('key');
                }
                return config || $q.when(config);
            },
            response: function(response) {
                if (response.status === 401) {
                    $log.debug('Hey! I"m javascript. Authorization is needed!');
                }
                return response || $q.when(response);
            }
        };
    }
]);


myApp.config(['$locationProvider', '$stateProvider', '$urlRouterProvider', '$httpProvider',
    function($locationProvider, $stateProvider, $urlRouterProvider, $httpProvider) {

        // Authorization interceptor
        $httpProvider.interceptors.push('AuthInterceptor');

    }
]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы