标头中的标记设置和jsonwebtoken中的验证

时间:2015-12-07 18:09:12

标签: angularjs node.js authentication jwt

我正在开发一个Web应用程序,我正在尝试为安全性实现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');
});

我不知道这是怎么回事。任何人都可以帮助我。

1 个答案:

答案 0 :(得分: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;
}