настройка токена в заголовках и проверка в jsonwebtoken

0

Я работаю над веб-приложением, в котором я пытаюсь реализовать проверку подлинности jwt для обеспечения безопасности. Я отправляю сгенерированный токен на клиентскую сторону и сохраняю его в заголовках, но когда я отправляю HTTP-запрос, тогда заголовок показывает пустой на стороне сервера.

это часть кода на стороне сервера для модуля входа.

           var profile = {
                name:rows[0].name,
                email:rows[0].email,
                role:rows[0].role_id
            };
            var token = jwt.sign(profile,'shhhhhhared-secret',{expiresInMinutes: 60*5 });

            res.json({
                success: true,
                user: rows[0], //userobject 
                token: token
            });

это часть контроллера, в которой мы настраиваем ответ в sesssionstorage.

dbServices.UserAuthenticate($scope.email,
                  $scope.password).then(function(response) {
                $rootScope.showLoader = false;
                if (response.data.success) {
                    var session_data = {
                        'token':response.data.token,
                        'user':{
                            'name':response.data.user.name,
                            'role':response.data.user.role_id,
                            'email':response.data.user.email
                        }
                    };
                    sessionStorage.sessionData = JSON.stringify(session_data);
                    $location.path('/');
                } else {
                    $scope.msg = 'Invalid Email or Password!'
                }
            })

это файл конфигурации, где я устанавливаю заголовки

App.factory('authInterceptor', ['$rootScope', '$q', '$window',
function($rootScope, $q, $window) {
    return {
        request: function(req) {
            req.headers = req.headers || {};
            if (sessionStorage.sessionData.token) {
                req.headers.Authorization = 'Bearer ' + sessionStorage.sessionData.token;
            }
            return req;
        },
        response: function(response) {
            if (response.status == 401) {
                console.log('header auth 401 login');
                $window.location = '/login';
            }

            return response || $q.when(response);
        }
    }
}
]);

App.config(function ($httpProvider) {
  $httpProvider.interceptors.push('authInterceptor');
});

Я не понимаю, что в этом не так. Может кто-нибудь мне помочь.

  • 0
    Похоже, sessionStorage не определено .... Возможно, вам придется добавить его.
Теги:
authentication
jwt

1 ответ

0

Вы выполняете JSON.stringify(session_data) при сохранении токена, но перед его чтением вы не делаете JSON.parse(sessionStorage.sessionData).

Попробуйте изменить

if (sessionStorage.sessionData.token) {
    req.headers.Authorization = 'Bearer ' + sessionStorage.sessionData.token;
}

с

var session_data = JSON.parse(sessionStorage.sessionData);
if (session_data.token) {
    req.headers.Authorization = 'Bearer ' + session_data.token;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню