【问题标题】:token setting in headers and verification in jsonwebtoken标头中的令牌设置和 jsonwebtoken 中的验证
【发布时间】:2015-12-14 15:01:13
【问题描述】:

我正在开发一个 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
            });

这是我们在 sessionstorage 中设置响应的控制器部分。

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');
});

我不明白这有什么问题。谁能帮帮我。

【问题讨论】:

  • 看起来 sessionStorage 是未定义的......你可能需要注入它。

标签: angularjs node.js authentication jwt


【解决方案1】:

您在保存令牌时执行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;
}

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2019-04-09
    相关资源
    最近更新 更多